如何从 imageView Android 获取 Bitmap 的真实坐标(X,Y)
How to take real coordinates(X,Y) of Bitmap from imageView Android
我没有什么问题。
我正在获取图像,转换为 Bitmap 并用此 Bitmap 填充 imageview。
那么问题来了,如何获取这个Bitmap的真实坐标(X,Y)?
为了更好地说明,我附上了一张图片:
如图所示,例如我得到了一张自定义分辨率的图像,用户可以通过黄色点制作 透视图 。
所以我需要知道,如何从 ImageView 中获取位图的真实坐标。
我目前所做的(但这种方法不正确):
我从 imageView 中获取 width/height 并使用此分辨率重新创建新位图。
Bitmap bt = Bitmap.CreateScaledBitmap(BitmapFactory.DecodeResource(Activity.Resources, Resource.Drawable.test),800,1420,false); //800 width 1420 height
imgView.SetImageBitmap(bt);
通过实施 TouchListener(方法 GetX()/GetY()),我得到点坐标(黄色圆圈覆盖在位图上),问题是这些坐标不正确。
当我在 imageView 上通过 ScaleType.FitXY 拉伸位图时,这对我来说也很有趣(它可以获取位图的真实坐标)?
那么我怎样才能实现我的目标呢?
使用 ImageView#getImageMatrix
,像这样:
final ImageView iv = new ImageView(this);
setContentView(iv);
// setup your image here by
// calling for example iv.setImageBitmap()
// or iv.setImageDrawable()
// or iv.setImageResource()
View.OnTouchListener otl = new View.OnTouchListener() {
Matrix inverse = new Matrix();
@Override
public boolean onTouch(View v, MotionEvent event) {
iv.getImageMatrix().invert(inverse);
float[] pts = {
event.getX(), event.getY()
};
inverse.mapPoints(pts);
Log.d(TAG, "onTouch x: " + Math.floor(pts[0]) + ", y: " + Math.floor(pts[1]));
return false;
}
};
iv.setOnTouchListener(otl);
我没有什么问题。
我正在获取图像,转换为 Bitmap 并用此 Bitmap 填充 imageview。
那么问题来了,如何获取这个Bitmap的真实坐标(X,Y)?
为了更好地说明,我附上了一张图片:
如图所示,例如我得到了一张自定义分辨率的图像,用户可以通过黄色点制作 透视图 。
所以我需要知道,如何从 ImageView 中获取位图的真实坐标。
我目前所做的(但这种方法不正确):
我从 imageView 中获取 width/height 并使用此分辨率重新创建新位图。
Bitmap bt = Bitmap.CreateScaledBitmap(BitmapFactory.DecodeResource(Activity.Resources, Resource.Drawable.test),800,1420,false); //800 width 1420 height
imgView.SetImageBitmap(bt);
通过实施 TouchListener(方法 GetX()/GetY()),我得到点坐标(黄色圆圈覆盖在位图上),问题是这些坐标不正确。
当我在 imageView 上通过 ScaleType.FitXY 拉伸位图时,这对我来说也很有趣(它可以获取位图的真实坐标)?
那么我怎样才能实现我的目标呢?
使用 ImageView#getImageMatrix
,像这样:
final ImageView iv = new ImageView(this);
setContentView(iv);
// setup your image here by
// calling for example iv.setImageBitmap()
// or iv.setImageDrawable()
// or iv.setImageResource()
View.OnTouchListener otl = new View.OnTouchListener() {
Matrix inverse = new Matrix();
@Override
public boolean onTouch(View v, MotionEvent event) {
iv.getImageMatrix().invert(inverse);
float[] pts = {
event.getX(), event.getY()
};
inverse.mapPoints(pts);
Log.d(TAG, "onTouch x: " + Math.floor(pts[0]) + ", y: " + Math.floor(pts[1]));
return false;
}
};
iv.setOnTouchListener(otl);