在我的应用程序中,我希望用户能够选择包含在ImageView
.
为了选择内容,我对类进行了子ImageView
类化,使其实现了OnTouchListener
在其上绘制一个由用户决定边框的矩形。
这是绘图结果的示例(要了解它的工作原理,您可以将其想象为在桌面上单击鼠标并拖动鼠标时):
现在我需要确定图像的哪些像素Bitmap
对应于所选部分。确定哪些点属于矩形很容易ImageView
,但我不知道如何获得对应的像素,因为ImageView
它的纵横比与原始图像不同。
我遵循了这里特别描述的方法,但也没有完全满意,因为在我看来,像素和点之间的对应关系是 1 对 1 的,ImageView
并且不会将原始图像上的所有对应像素都提供给所选的区域。
在其中的点上调用hoveredRect
矩形是:ImageView
class Point {
float x, y;
@Override
public String toString() {
return x + ", " + y;
}
}
Vector<Point> pointsInRect = new Vector<Point>();
for( int x = hoveredRect.left; x <= hoveredRect.right; x++ ){
for( int y = hoveredRect.top; y <= hoveredRect.bottom; y++ ){
Point pointInRect = new Point();
pointInRect.x = x;
pointInRect.y = y;
pointsInRect.add(pointInRect);
}
}
如何获得Vector<Pixels> pixelsInImage
包含图像对应像素的a Bitmap
?
附加说明
我将更好地解释我的问题的背景:
我需要对所选部分进行一些图像处理,并希望确保矩形中的所有像素都得到处理。
图像处理将在服务器上完成,但它需要确切知道要处理哪些像素。服务器处理具有真实尺寸的图像,android 应用程序只是通过传递包含像素坐标的向量来告诉服务器要处理哪些像素
以及为什么我不喜欢上面链接中提出的解决方案:
给出的答案以 1 对 1 的方式变换坐标。这种方法显然对我的任务无效,因为
ImageView
屏幕上某个大小的 50 个点的区域不能对应于真实图像中相同数量像素的区域,但应该考虑不同的纵横比。
例如,如果图像小于ImageView
应用程序上显示的区域,则应选择以下区域: