【问题标题】:How to convert coordinates on Bitmap to real coordiates on Image View displayed on screen如何将位图上的坐标转换为屏幕上显示的图像视图上的真实坐标
【发布时间】:2015-12-17 18:07:42
【问题描述】:

我有一个显示图像(例如 2000x1000 像素)的图像视图,并且我在该图像(不是图像视图)上有一个坐标 (X,Y)。例如,我的图像视图的画布是 600x800。如何将点 (X,Y) 转换为屏幕坐标,以便我可以在 Image View 的 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 个角球的尺寸正常。红色是保存图片的 Image View 的边界。

【问题讨论】:

  • "变得非常小" 你能发布任何截图吗?比如,比例因子是不是错了?
  • @Jenny 我刚刚为你发布了截图。
  • 我不确定您所说的“正常”尺寸是什么意思,但假设您希望线条和圆圈更大。这不在我的专业领域。可能想为那个打开一个新问题。可能它们对于巨大的位图是“正常”大小的,然后缩小(像其他所有东西一样)以适应视图?

标签: android canvas matrix bitmap imageview


【解决方案1】:

我认为这可能取决于您显示图像的准确程度。您的 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 和 y 乘以 800/1000 得到 (399.9,720)。

【讨论】:

  • 嗨@Jenny 我实际上尝试了你提到的比例因子,但它对我不起作用。我希望坐标准确地显示在屏幕上,因为我正在对图像进行文档边缘检测。
  • 如果您无法处理舍入错误,那么您可能别无选择,只能使您渲染的图像与 ImageView 的大小相同。如果舍入误差不是问题,那么我很困惑标准缩放如何使您的图像很好,但不是您的绘图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多