有没有办法将矩阵转换为替代比例?
Is there a way to translate a matrix to an alternate scale?
假设我从 1000px x 1000px 的位图开始
我将它加载到 SurfaceView
驻留 Canvas
中,以任意(并且取决于设备不同)尺寸显示。
我可以在运行时获取这些尺寸并测量它们与原始尺寸之间的比例(如果我最后需要该信息)。
然后我允许用户pinch/zoom/translate显示canvas周围的图像。一直以来,我都有一个 Matrix
来跟踪并用于在其显示的屏幕区域中重新绘制图像。
随后这个 Matrix
的值全部应用于缩放后的 space(而不是原始的 1000x1000 图形)。
到目前为止一切顺利 - 我已经完成了所有这些工作。
不过,总而言之,我想将这个矩阵应用到原始位图上并保存出来。但是,我不知道如何修改其所有内部值以将其应用回未缩放的原始 (1000x1000) 大小。
想知道是否有某种自动神奇的方式来转换这些,或者我是否必须以某种方式将基于两种尺寸之间的比例的每个值应用回新矩阵。
求逆矩阵
矩阵{ a,b,c,d,e,f } 逆矩阵 { ia, ib, ic, id, ie, if }
var cross = a * d - b * c;
ia = d / cross;
ib = -b / cross;
ic = -c / cross;
id = a / cross;
ie = (c * f - d * e) / cross;
if = -(a * f - b * e) / cross;
逆向变换,原图像坐标到屏幕坐标逆矩阵将屏幕坐标变换到图像坐标。
如果您在屏幕上进行了变换,并且想知道屏幕左上角在图像上的哪个位置。获取逆变换并将其应用于左上角的屏幕坐标 (0,0)。
scrX = ?
scrY = ?
imageX = scrX * ia + scrY * ic + ie;
imageY = scrX * ib + scrY * id + if;
假设我从 1000px x 1000px 的位图开始
我将它加载到 SurfaceView
驻留 Canvas
中,以任意(并且取决于设备不同)尺寸显示。
我可以在运行时获取这些尺寸并测量它们与原始尺寸之间的比例(如果我最后需要该信息)。
然后我允许用户pinch/zoom/translate显示canvas周围的图像。一直以来,我都有一个 Matrix
来跟踪并用于在其显示的屏幕区域中重新绘制图像。
随后这个 Matrix
的值全部应用于缩放后的 space(而不是原始的 1000x1000 图形)。
到目前为止一切顺利 - 我已经完成了所有这些工作。
不过,总而言之,我想将这个矩阵应用到原始位图上并保存出来。但是,我不知道如何修改其所有内部值以将其应用回未缩放的原始 (1000x1000) 大小。
想知道是否有某种自动神奇的方式来转换这些,或者我是否必须以某种方式将基于两种尺寸之间的比例的每个值应用回新矩阵。
求逆矩阵
矩阵{ a,b,c,d,e,f } 逆矩阵 { ia, ib, ic, id, ie, if }
var cross = a * d - b * c;
ia = d / cross;
ib = -b / cross;
ic = -c / cross;
id = a / cross;
ie = (c * f - d * e) / cross;
if = -(a * f - b * e) / cross;
逆向变换,原图像坐标到屏幕坐标逆矩阵将屏幕坐标变换到图像坐标。
如果您在屏幕上进行了变换,并且想知道屏幕左上角在图像上的哪个位置。获取逆变换并将其应用于左上角的屏幕坐标 (0,0)。
scrX = ?
scrY = ?
imageX = scrX * ia + scrY * ic + ie;
imageY = scrX * ib + scrY * id + if;