请问有人可以解释一下《黑客帝国》中的“Matrix”(安德森先生)吗?

3

我对手动操作图像还很陌生,请多包涵。

我有一张图像,允许用户缩放/移动。基本行为完美无缺。但是,我需要能够抓住“视口”中的任何内容(可见裁剪区域矩形),并将其另存为单独的位图。

在此之前,我需要确定图像实际所在的位置以及正在显示的内容。这比我想象的要棘手得多。

我的问题在于Matrix文档非常模糊,我不知道如何测量转换后的图像坐标和尺寸。据我所见,即使用户缩小/放大,图像的X、Y仍保持不变。因此,即使它报告为0,0,它实际上显示在(例如)100,100处。而我能获得这些坐标的唯一方法是进行相当丑陋的计算(再次强调…可能不是最优雅的方式,因为几何不是我的长项)。

我希望我错过了某些东西,并且有一种方法可以获取对象的自动翻译坐标和尺寸。

在理想情况下,我将能够调用(伪)myImg.getDisplayedWidth()myImg.getDisplayedX()

哦,我还应该补充一点,这可能是我自己引起的问题,因为我使用图像中心作为缩放/移动的点。如果我将默认的0,0坐标作为不变点,则无论其大小如何,位置都将正确。所以…也许所有这些的答案就是简单地找出我的中心偏移量,并将其应用于我的翻译?

非常感谢您的帮助(请不要随意修改我的问题标题!)。


澄清一下:您是否拥有应用于图像的矩阵以及原始图像点?此外,这是 android.graphics.Matrix 还是 android.opengl.Matrix - user545680
我不确定我理解第一个问题。我没有使用OpenGL。我有一个位图,它被绘制到一个视图的画布上。该视图被设置为一个带有clipChildren属性设置为"true"的布局的子视图。我不知道你所说的"原始图像点"是什么意思。我自己放置图像。目前,我必须将图像移动到视口中显示的位置进行转换,因为一开始它以大约0.3的比例显示。当我缩放图像时,我使用图像中心的一个点,使其从中间向外扩展。 - Yevgeny Simkin
7
我喜欢之前有趣的标题,安德森先生 :) - ee.
3
很遗憾,没有人能够告诉你“矩阵”是什么,你必须亲眼去看。 - st0le
1
@Dr.Dredel 请参考http://meta.stackexchange.com/questions/64082/why-do-people-keep-editing-my-questions - user545680
显示剩余9条评论
1个回答

2
矩阵方法mapPoints(float[] dst, float[] src)可用于通过应用矩阵平移来获得一系列已翻译的点。更通俗易懂地说,Matrix类的实例不仅包含翻译指令,还包括方便的方法将矩阵平移应用于一系列点。
因此,在您的情况下,您只需要未翻译的位图的角落(x,y,宽度,高度),并将角点传递到该方法中以获取已翻译的点。

你太棒了。所以,我正在尝试使用RectF风格,它可以正确地获取x、y,但将w、h显示为0。我可能只能按原样使用它(因为通过将原始W *比例乘以来轻松获取真实宽度),但我想知道您所说的“将位图传递”到矩阵是什么意思。我没有看到带有位图参数的签名,因此不清楚您要我如何做到这一点。无论如何,我会给您打勾,因为您已经让我完成了99%的工作。 :) - Yevgeny Simkin
@Dr.Dredel 不好意思,那是语法错误。应该用“them”代替“it”。现在看起来怎么样? - user545680
@Dr.Dredel 当构造你的RectF时,你是通过 new RectF(bitmapX, bitmapY, bitmapX + bitmap.getWidth(), bitmapY + bitmap.getHeight()) 这个方法来获取它的吗? - user545680
不,我只是调用了默认(空)构造函数...我会按照你上面描述的方式尝试一下,看看是否能给它带来最后一点动力。否则它已经完美地工作了!再次感谢。 - Yevgeny Simkin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接