2 baby bonnie Baby_Bonnie 于 2012.11.14 13:02 提问

把ImageView的坐标转换成位图中的坐标

在程序中我想实现拍摄完一张图片后,想要获取图片中人物的眼睛在图片中的坐标。使用OnTouchListener.onTouch(…)方法获得ImageView的坐标。

如何把用户手动点击的位置坐标,及ImageView的坐标转化成位图中的坐标?

4个回答

nana4ever
nana4ever   2012.11.22 17:11
已采纳

给你先参考方法,这里面的方法你肯定能用的上:

ImageView imageView = (ImageView)findViewById(R.id.imageview);
Drawable drawable = imageView.getDrawable();
Rect imageBounds = drawable.getBounds();

//初始化bitmap的宽高
int intrinsicHeight = drawable.getIntrinsicHeight();
int intrinsicWidth = drawable.getIntrinsicWidth();

//可见image的宽高
int scaledHeight = imageBounds.height();
int scaledWidth = imageBounds.width();

//使用fitXY
float heightRatio = intrinsicHeight / scaledHeight;
float widthRatio = intrinsicWidth / scaledWidth;

//获取图像边界值
int scaledImageOffsetX = event.getX() - imageBounds.left;
int scaledImageOffsetY = event.getY() - imageBounds.top;

//根据你图像的缩放比例设置
int originalImageOffsetX = scaledImageOffsetX * widthRatio;
int originalImageOffsetY = scaledImageOffsetY * heightRatio;
franzhong
franzhong   2012.11.14 14:46

触屏得到的坐标只要减去,imageView距左距上距离不就是相对于图片的坐标了吗
如果图片充满了全屏的话,这个距离就是0,不用减,点击的位置xy也是眼睛的坐标了
不知你是不是这个意思

Baby_Bonnie
Baby_Bonnie 谢谢你的回答,就是这个意思!
大约 5 年之前 回复
zxd_72
zxd_72   2012.11.15 09:36

我在API 10+这个环境下,这个方法可以实现:

final float[] getPointerCoords(ImageView view, MotionEvent e)
{
    final int index = e.getActionIndex();
    final float[] coords = new float[] { e.getX(index), e.getY(index) };
    Matrix matrix = new Matrix();
    view.getImageMatrix().invert(matrix);
    matrix.postTranslate(view.getScrollX(), view.getScrollY());
    matrix.mapPoints(coords);
    return coords;
}
zhwswws
zhwswws   2015.06.29 16:13

楼主问题解决了吗? 我也是一样的问题 。。求解答

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!