有一個ImageView,它有一個Image,它已被放大和旋轉。如何在ImageView中查找圖像的中心點和邊界
看到的畫面:
的圖像由android.graphics.Matrix
縮放。
你可以看到有紅色的點是圖像的中心點,也是一個藍色的邊框。如何計算它們?
(更新:我要藍色的邊框內的少女形象上操作,而不是全貌,這是背景)
有一個ImageView,它有一個Image,它已被放大和旋轉。如何在ImageView中查找圖像的中心點和邊界
看到的畫面:
的圖像由android.graphics.Matrix
縮放。
你可以看到有紅色的點是圖像的中心點,也是一個藍色的邊框。如何計算它們?
(更新:我要藍色的邊框內的少女形象上操作,而不是全貌,這是背景)
有兩者之間的數學相關性。如果有其他信息可用: - 假設矩形對所有角都有直角 - 。
center.X = (aCorner.X + oppositeCorner.X)/2;
center.Y = (aCorner.Y + oppositeCorner.Y)/2;
其中aCorner是一個任意的角落,而另一個角落是aCorner的對角。
這是微不足道的,包括更多的辛苦工作來計算邊界(和更多的信息;中心位置,寬度和圖片的高度和旋轉角度)。 假設圖像寬度爲「w」,高度爲「h」,角度爲「a」,居中「cX」和「cY」。 第一個角落;
length = sqrt(w^2+h^2)/2;
x = (length)*(cos(a)*(-w/length) - (h/length)*sin(a)) + cX;
y = (length)*(sin(a)*(-w/length) + (h/length)*cos(a)) + cY;
第二個角落;
x = (length)*(cos(a)*(w/length) + sin(a)*(h/length)) + cX;
y = (length)*(cos(a)*(h/length) - sin(a)*(w/length)) + cY;
第三;
x = -(length)*(cos(a)*(-w/length) + (h/length)*sin(a)) + cX;
y = -(length)*(sin(a)*(-w/length) - (h/length)*cos(a)) + cY;
第四條;
x = -(length)*(cos(a)*(w/length) - sin(a)*(h/length)) + cX;
y = (length)*(cos(a)*(h/length) - sin(a)*(w/length)) + cY;
長度是矩形對角線的一半。與COS和罪惡內部是三角變換的結果:
sin(a+b) = sin(a)*cos(b) + cos(a)*sin(b)
[....]
和CX和CY被用來從任意座標系到一個特定的座標系轉換的角落。
我知道,我知道這有點矯枉過正。 Matrix類可以自己擁有這個功能。我相信如果有的話,其中使用的方法可以分解爲我在這裏描述的方法。
注:角度α-actually甚至罪的(a)和cos(a)中,這是更好 - 可以通過
Matrix.getValues被訪問(浮動[]值)
大多數2D矩陣使用此方案:
| sin(a) 0 0 |
| 0 -cos(a) 0 |
| 0 0 scale|
我不確定Android API的特定實現。
順便說一句,可能有一些簽名錯誤,所以要小心。
感謝數學答案。我也想知道如何使用android API來獲取縮放ImageView中圖像的這些點(4個角)。 – Freewind
我不確定API是否部署了該功能。因爲平移/變換矩陣大多隻用於單向編輯。但是我的建議是在位圖上沒有矩陣時繪製你想要繪製的內容。然後設置矩陣。 – mehmetminanc
讓我想一想,謝謝! – Freewind
你能澄清你的問題嗎?你想要處理哪個圖像?整個形象,還是隻有藍色邊框和一個女孩在裏面的圖像? – Huang
帶藍色邊框和內部女孩的圖像:) – Freewind