从自定义视图缩放形状坐标以适应不同的屏幕尺寸

scale shape coordinates from custom view to adapt different screen sizes

我正在开发一个应用程序,使用相机预览实时检测物体,然后拍照并将其显示在另一个 activity 和一个边界框(大多数情况下是多边形)在检测到的对象上绘制。

我设法做到了,一切正常。现在,我试图通过设置较小的相机预览尺寸并通过更改相机参数拍摄具有更大分辨率的照片来加快检测过程。但我将获得的坐标必须缩放以匹配大图片尺寸。

就我而言:

对于 canvas 大小,我使用它来获取屏幕分辨率:

public static int getScreenWidth() {
    return Resources.getSystem().getDisplayMetrics().widthPixels;
}

public static int getScreenHeight() {
    return Resources.getSystem().getDisplayMetrics().heightPixels;
}

我的 xml 文件如下所示:

<LinearLayout>
     ....
    <android.support.v7.widget.Toolbar
      ....
    </android.support.v7.widget.Toolbar>

      ....
    <FrameLayout
        android:id="@android:id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_marginBottom="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="16dp">

        <packagename.CropImageView
            android:id="@+id/scannedImage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:adjustViewBounds="true"
            android:src="@mipmap/ic_launcher_round" />

    </FrameLayout>
</LinearLayout>

在我的自定义视图中 class CropImageView 我将四个坐标传递给 onDraw 方法并绘图 他们之间的路径

注意 :我看到了几个关于大致相同主题的问题,但我无法与它们联系起来,因为我无法使用像我这样的用例。非常感谢任何信息,帮助。

我需要做的就是在下面找到 YX 的比例因子:

    scaleFactorY = (float) newWidth / oldWidth;
    scaleFactorX = (float) newHeight / oldHeight;

然后将坐标乘以这些因数。此外,您还需要确保 preview sizepicture size 和将容纳图片的 container 具有相同的宽高比,否则您将得到错位的坐标。

要获得所需的纵横比,只需执行以下操作:width / height