假设我从一个1000px x 1000px
的位图开始我将其加载到SurfaceView
居民Canvas
中,该Matrix
居民显示一些任意(并且取决于设备的不同)尺寸。
我可以在运行时获取这些尺寸并测量它们与原始尺寸之间的比例(如果我最后需要这些信息)。
然后我允许用户在显示的画布周围捏合/缩放/翻译图像。我一直有Matrix
跟踪,并用于在其显示的屏幕区域中重新绘制图像。
随后此http://example.com/createclass
的值全部应用于缩放空间(而不是原始的1000x1000图形)。
到目前为止一切顺利 - 我完成了所有这些工作。
然而,当完成所有操作后,我想将此Matrix应用于原始位图并将其保存。但是,我不知道如何修改其所有内部值以将其应用回未缩放的原始(1000x1000)大小。
好奇是否有一些自动神奇的方式来翻译这些或者我必须以某种方式将每个值基于两个大小之间的比例应用回新的Matrix。
答案 0 :(得分:3)
反转矩阵
矩阵{a,b,c,d,e,f}和逆矩阵{ia,ib,ic,id,即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;