2011-11-18 28 views
4

我很新手动操作图像,请耐心等待。有人能解释矩阵(Mr.Anderson)吗?

我有一个图像,我允许用户缩小/增长和移动。

基本行为完美。但是,我需要能够抓住“视口”(可见剪辑区域矩形)中的任何内容并将其另存为一个单独的位图。

在我能做到这一点之前,我需要弄清楚图像的实际位置和显示内容。这比我想象的更加棘手。

我的问题是,矩阵文件是荒谬的模糊,我失去了我如何可以测量我的转换图像的坐标和尺寸。正如我所看到的,即使用户收缩/增长,图像的X,Y也保持不变。所以,即使它报告在0,0时,它也显示在(比如说)100,100处。我能得到这些坐标的唯一方法就是做一个相当丑陋的计算(再次......我可能不是最优雅的方式,因为几何不是我的特长)。

我有点希望我失去了一些东西,并有一些方法来拉对象的自动翻译的坐标和尺寸。

在理想的世界中,我可以打电话给(伪)myImg.getDisplayedWidth()myImg.getDisplayedX()

哦,我应该补充一点,这可能都是一个问题,我通过使用图像中心作为增长/缩小点来引起我自己。如果我将默认的0,0坐标作为非变化点,我认为无论它的大小如何,位置都是正确的。所以...也许所有这一切的答案是简单地找出我的中心偏移并将其应用于我的翻译?

所有帮助非常感谢(和人们不是随意混淆我的问题的标题更是如此!)。

+0

澄清:您是否将Matrix应用于图像以及原始图像点?此外,这是'android.graphics.Matrix'或'android.opengl.Matrix'? – Bringer128

+0

我不确定我是否理解第一个问题。我没有使用opengl。我有一个正在绘制到视图中的画布的位图。视图被设置为一个布局,其clipChildren设置为“true”。我不知道“原始图像点”是什么意思。我自己放置图像。目前,我必须翻译必须移动图像的位置,以便在视口中显示图像,因为即便是以大约.3的比例显示图像。当我缩放图像时,我在图像中心使用了一个点,所以它从中间向外生长。 –

+0

因此,随着它的增长,它被报告X,Y是静态的,即使它的左上角在用户捏合时移动。 –

回答

2

Matrix方法mapPoints(float[] dst, float[] src)可用于通过应用Matrix转换来获得一系列转换点。或者(略)更多外行人的术语,Matrix类的一个实例不仅包含翻译指令,还包含将矩阵转换应用到一系列点的便利方法。所以在你的情况下,你只需要你未翻译的位图(x,y,宽度,高度)的角点,并将角点传入该方法以获得转换的点。

+0

你摇滚。所以,我尝试了RectF的风格,它正确地得到了x,y,但将w,h显示为0.我可以直接使用它(因为只需将原始数据乘以原始数据即可轻松获得真实宽度W *的比例尺,但我很好奇你将位图传递到矩阵中的意思,我没有看到签名需要位图参数,所以我不清楚你对我的意义不管怎样,我会给你对号的,因为你让我有99%的回家的路。:) –

+0

@ Dr.Dredel糟糕,这是一种语法失败。它应该是“他们”而不是“它”。现在看起来如何? – Bringer128

+0

@ Dr.Dredel当你构建你的RectF时,你是通过'new RectF(bitmapX,bitmapY,bitmapX + bitmap.getWidth(),bitmapY + bitmap.getHeight())'来获得它吗? – Bringer128