如何将位图上的坐标转换为屏幕上显示的图像视图上的真实坐标

时间:2015-12-17 18:07:42

标签: android canvas matrix bitmap imageview

我有一个显示图像的图像视图(例如2000x1000像素),我在该图像上有一个坐标(X,Y)(不是图像视图)。我的图像视图的画布例如是600x800。如何将点(X,Y)转换为屏幕坐标,以便我可以在图像视图的OnDraw(...)方法上绘制路径。任何帮助表示赞赏!谢谢。

更新:如果我使用矩阵绘制坐标之间的路径,它可以工作,但我绘制的路径和对象变得非常小。这是我使用的代码。

final Matrix matrix = canvas.getMatrix();
matrix.preConcat( _view.getImageMatrix() );
matrix.preScale( 1.0f /_inSampleSize, 1.0f / _inSampleSize);
canvas.setMatrix( matrix );
//I draw the path here

更新:我添加了一张图片,以显示使用矩阵绘制路径时的效果。我想让4线和4个角球保持正常尺寸。红色是保存图片的图像视图的边界。 enter image description here

1 个答案:

答案 0 :(得分:0)

我认为这可能取决于您显示图像的准确程度。您的ImageView(600x800)与位图(2000x1000)的宽高比不同。

在缩小位图时,您是否保持位图的宽高比稳定?如果是这样,哪个部分(高度或宽度)占据整个屏幕,哪个部分有黑色(或其他什么)作为填充?这有助于您确定比例因子。

scale_factor = goal_height/height1;  //if height is what you are scaling by
scale_factor = goal_width/width1;  //if width is what you are scaling by.

我会尝试:

x_goal = x1 * scale_factor;
y_goal = y1 * scale_factor;

也就是说,如果你的图像中有一个点(1333,900),并且你的图像占据了整个宽度,你可以将x和y乘以600/2000得到(399.9,270)。 (你可能想要舍入那个小数)。

如果你没有保持位图长宽比稳定(也就是说,你正在挤压它以适应),那么你有一个height_scale_factor和width_scale因子。因此,您需要(1333,900)并将x乘以600/2000,将乘以800/1000得到(399.9,720)。

相关问题