尝试从ImageView的onTouchListener中获取Bitmap像素

3
我正在ImageView上显示一个位图。当点击ImageView时,我想获取被点击的像素点的x/y坐标。我已经注册了ImageView的onTouchListener,在onTouch方法中使用getX和getY获取触摸位置。问题在于,ImageView中的图像可能比视图本身要大,因此它被缩小以适应屏幕。然后返回的x和y坐标是视图的坐标,但不一定是对应于位图上相应像素的坐标。
我能否获得某种比例因子来知道它被调整了多少?如果不能,有人可以建议我如何获取所需的信息吗?最重要的是我能够获取像素坐标-如果必须更改视图类型,那也没关系。
另外,有时位图比屏幕小,所以它会被放大。在这种情况下,从MotionEvent接收到的x和y可能超出实际位图的边界。
2个回答

0

我遇到了同样的情况。这个线程已经超过一年了,但我认为它可能对某些人有用。在将位图设置到ImageView之前,我必须对其进行缩放。

以下是代码:

//Convert Uri to Bitmap
inputBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);

//Scale the bitmap to fit in the ImageView
Bitmap bmpScaled = Bitmap.createScaledBitmap(inputBitmap, img.getWidth(), img.getHeight(),true);

//Set the scaled bitmap to the ImageView
img.setImageBitmap(bmpScaled);

经过这个操作,触摸坐标将与位图的坐标相同。

0

请查看 ScaleType 属性。您需要根据 getScaleType()的结果对原始图像进行计算,但这是值得一试的。


ScaleType的问题在于它只返回用于缩放的方法,而不是实际缩放的比例。 - Eighty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接