我尝试在我的Samsung Note 8上的应用程序中实现camera2,但是预览中的图像变形了。
预览尺寸:2220x1080(比率18.5:9)
相机尺寸:1920x1080(比率16:9)
似乎适合从1920x1080到2220x1080的图像大小
如何以全屏(2220x1080)预览和捕获图像?
public void createCameraPreviewSession() {
try {
SurfaceTexture texture = this.getSurfaceTexture();
assert texture != null;
texture.setDefaultBufferSize(previewSize.getWidth(), previewSize.getHeight());
Surface surface = new Surface(texture);
previewBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
previewBuilder.addTarget(surface);
cameraDevice.createCaptureSession(Arrays.asList(surface, reader.getSurface()),
new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
if (null == cameraDevice) {
return;
}
previewSession = cameraCaptureSession;
thread = new HandlerThread("CameraPreview");
thread.start();
backgroundHandler = new Handler(thread.getLooper());
try {
previewBuilder.set(CaptureRequest.CONTROL_AF_MODE,CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
previewSession.setRepeatingRequest(previewBuilder.build(), null, backgroundHandler);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onConfigureFailed(
@NonNull CameraCaptureSession cameraCaptureSession) {
}
}, null
);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
Galaxy Note 8是众多相机不支持完全适合屏幕的镜框尺寸的设备之一。常见的解决方法是'装箱':准备具有一些黑色边距和与所需预览框架宽高比匹配的矩形表面的屏幕布局。 camera2 API将自动缩放预览框以适合表面 size ,但如果宽高比不匹配,结果将失真。
另一种方法是“裁剪” 预览以适合屏幕(同样,我们所说的是纵横比,而不是像素数)。通过TextureView而不是通过表面更容易做到这一点。在 Full screen preview camera2Basic Example Project 中,您可以找到该代码的编码方式。
另请参见 Android Camera2 capture image skewed ,其中专门讨论了某些Samsung设备上的camera2帧大小的一些问题。