android - 如何从 imageView Android 中获取位图的真实坐标(X,Y)

标签 android bitmap xamarin imageview coordinates

我没什么问题。
我正在获取图像,正在转换为 Bitmap 并使用此 Bitmap 填充 imageview。

那么问题来了,如何获取这个Bitmap的真实坐标(X,Y)?
为了更好地说明,我附上了一张图片:
What i have
如图所示,例如我得到了一张自定义分辨率的图像,用户可以通过黄色点制作透视
所以我需要知道,如何从 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 拉伸(stretch)位图时,这对我来说也很有趣(它可以获取位图的实际坐标)?

那么我怎样才能实现我的目标呢?

最佳答案

使用 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);

关于android - 如何从 imageView Android 中获取位图的真实坐标(X,Y),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33391196/

相关文章:

android - 类路径中的某些运行时 JAR 文件具有不兼容的版本。考虑从类路径中删除它们

java - 在服务器上提交表单之前对密码进行哈希处理

.net - WPF 模糊图像 - 位图类

c# - 在 Xamarin Forms 中添加按钮的最佳方式是什么?

android - 使用 Espresso 单击主页图标

android - 在 Android 设备中加载后存储 Google map

android - 划屏显示android中的图像

java - 从 url 获取图片到数据库 SQLite Android

android - webView.evaluateJavascript。不想执行。

c# - Xamarin Android 上的振动