的圖像由一個矩陣縮放:如何獲得任意矩陣的縮放值?
Matrix matrix = new Matrix();
matrix.postScale(...);
matrix.postTranslate(...);
matrix.postRotate(...);
...
希望將縮放圖像將不小於原來的一半,所以總變焦不應小於0.5。
但如何做到這一點?我試圖讓矩陣的第一個值進行檢查:
float pendingZoom = 0.6f;
float[] values = new float[9];
Matrix.getValues(values);
float scalex = values[Matrix.MSCALE_X];
然後:
if(scalex<0.5) {
pendingZoom = pendingZoom * (0.5f/scalex);
}
不幸的是,它不工作有時。如果圖像已旋轉,則scalex
可能爲負數,pendingZoom
也將爲負數。
如何正確執行此操作?
UPDATE
我剛剛發現了values[Matrix.MSCALE_X]
不是realiable變焦值。我用它來計算矩形的新寬度,這是不正確的。
相反,我試圖通過矩陣兩點圖,並計算兩個距離:
PointF newP1 = mapPoint(matrix, new PointF(0, 0));
PointF newP2 = mapPoint(matrix, new PointF(width, 0));
float scale = calcDistance(newP1, newP2)/width;
我現在就可以得到正確的scale
值。但我不確定這是否是最佳解決方案。
有誰知道爲什麼旋轉後矩陣是不同的?似乎在postRotate之後「scale x」不在Matrix.MSCALE_X索引(它是0)下,但是在1索引下。 –
將矩陣分解爲平移,縮放和旋轉解釋[here](http://math.stackexchange.com/questions/13150/)。 – ulatekh