ImageView
中的图像的某些内容。为了选择内容,我创建了ImageView
类的子类使其实现OnTouchListener
接口,在其上绘制一个由用户决定边框的矩形。下面是绘图结果的示例(你可以将其想象成在桌面上单击并拖动鼠标的方式):
![enter image description here](https://istack.dev59.com/rM1VL.webp)
Bitmap
图像的哪些像素对应于所选部分。很容易确定属于矩形的ImageView
的点,但我不知道如何获取相应的像素,因为ImageView
具有与原始图像不同的纵横比。我遵循了描述的方法,尤其是这里和这里,但我并不完全满意,因为我认为所做的对应是在
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`?
补充说明
我稍微解释一下我的问题背景:
我需要在所选的部分进行一些图像处理,并确保矩形中的所有像素都被处理。
图像处理将在服务器上完成,但它需要确切地知道要处理哪些像素。服务器使用具有真实尺寸的图像,Android 应用程序只通过传递包含像素坐标的向量来告诉服务器要处理哪些像素。
为什么我不喜欢上面链接中提出的解决方案:
给出的答案会以1对1的方式转换坐标。这种方法显然对于我的任务是无效的,因为某个大小的
ImageView
上的50个点的区域可能与真实图像中相同数量的像素的区域不对应,而应该考虑不同的长宽比。
例如,如果图像比应用程序中显示的 ImageView
小,则应选择以下区域: