如何在图像控制中获取位图图像的x和y坐标?

时间:2011-08-05 05:37:11

标签: android

我在图像视图控件中有一个图像。由于图像的x和y坐标不断变化,用户可以对此图像执行平移和缩放。有没有办法找出图像控制中图像的当前设置x和y坐标?任何有关它的代码都会更有益。

1 个答案:

答案 0 :(得分:12)

ImageView使用Matrix类进行缩放(缩放)和平移(平移)。如果你能掌握矩阵,那么你可以检索缩放/平移视图的(左,上)坐标。

可缩放代码&可以在stackoverflow posts

之一中使用pannable extended imageview

在该帖子中,您将看到扩展的ImageView类将矩阵作为用于缩放/转换的成员变量。

您可以使用以下代码从矩阵中获取缩放/平移的ImagevIew(实际上是位图)的边界。

RectF r = new RectF(); 
matrix.mapRect(r);
Log.i(TAG, "Rect " + r.left + " " + r.top + " " + r.right + " " + r.bottom + " " + mOverAllScale + " ");

新添加的答案

要理解以下代码,您需要通过此link并了解。

<强>翻译

当用户拖动图像时,屏幕坐标(Absolute)和Bitmap坐标不同步。 [您写入位图的任何内容都会通过画布显示(在onDraw()中)]如果应用着色,用户会看到它应用于位图图像上的其他区域。要纠正此问题,您需要进行翻译。翻译会将用户输入坐标(屏幕坐标)更改为位图坐标(按用户的意图) 以下代码段可以帮助您进行翻译。

让用户输入坐标为(x,y)然后,

RectF r = new RectF(); 
matrix.mapRect(r);
Log.i(TAG, "Rect " + r.left + " " + r.top + " " + r.right + " " + r.bottom + " " + mOverAllScale + " ");
float newX =  x - r.left;
float newY =  y - r.top;

您使用新的坐标代替(x,y)。

缩放(缩放)

当用户捏入/捏出时;位图被缩小/放大。你必须观察原始位图不会改变,只从显示角度进行缩放。 这再次导致屏幕和位图之间的同步丢失。应用于屏幕的着色应反映在显示的图像中。 以下代码段可以帮助您进行缩放。

// mScalingFactor shall contain the scale/zoom factor
float scaledX = (event.getX() - r.left);
float scaledY = (event.getY() - r.top);

scaledX /= mScalingFactor;
scaledY /= mScalingFactor;

词shash