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



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

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

就我而言:

  • 相机预览尺寸始终为:640x480(坐标与此尺寸匹配(
  • 拍摄的照片 尺寸将使用此处接受的答案中提到的方法进行选择。
  • 在大多数情况下,图片尺寸会很大(在我的手机中是4260x3120(,我正在调整画布大小以适合屏幕

对于画布尺寸,我正在使用它来获取屏幕分辨率:

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>

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

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

我需要做的就是找到Y的比例因子,并按照以下内容X

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

然后将坐标与这些因素相乘。您还需要确保preview sizepicture size和将保存图片的container具有相同的纵横比,否则您将获得错位的坐标。

要获得您需要的纵横比,只需这样做:width / height

最新更新