我正在尝试分析图像,所以我在setTargetResolution((函数中设置了160120,但当我运行应用程序时,它在我的手机中将分辨率更改为320240,但在其他手机中运行良好。我的手机是Redmi 6 pro。
HandlerThread analyzerThread = new HandlerThread("FaceDetection");
analyzerThread.start();
ImageAnalysis imageAnalysis =
new ImageAnalysis.Builder()
.setTargetResolution(new Size(160, 120))
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build();
imageAnalysis.setAnalyzer(executor, image -> {
int rotationDegrees = image.getImageInfo().getRotationDegrees();
if (image == null || image.getImage() == null) {
return;
}
在从中更正目标分辨率设置后,应该能够解决该问题
.setTargetResolution(new Size(160, 120))
至
.setTargetResolution(new Size(120, 160))
要设置目标分辨率,开发人员可以参考https://developer.android.com/reference/androidx/camera/core/ImageAnalysis.Builder#setTargetResolution(android.util.Size(:
分辨率大小应在坐标系中表示在通过目标旋转来旋转所支撑的尺寸之后。对于例如,在自然目标中具有人像自然定向的设备请求人像图像的旋转可以指定480x640,等等设备,旋转90度并以横向为目标指定640x480。
设置Size(160120(在库的较新CameraX版本中无法获得160x120的结果大小的原因:
在旧版本中,CameraX仅比较目标的区域大小分辨率以找到最接近的大小。因此,160x120仍然选定。在较新版本中,CameraX会尝试找到最受支持的可以框住由目标校准的目标分辨率的大小旋转该代码未设置目标旋转。我想这个设备是在纵向方向,因此默认目标旋转为rotation_0。通过ROTATION_0校准目标分辨率后,CameraX将尝试选择最接近的支持大小,该大小可以框住120x160。最后,选择320x240。