我正在尝试使用Camera2 api来拍照。我在Android 6.0.1
和5.1.1
上得到了正确的结果,但没有5.0
。
我不明白为什么。
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraDevice.getId());
Size[] jpegSizes = null;
if (characteristics != null) {
jpegSizes = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP).getOutputSizes(ImageFormat.JPEG);
}
if (jpegSizes != null && 0 < jpegSizes.length) {
width = jpegSizes[0].getWidth();
height = jpegSizes[0].getHeight();
Log.i("jpegSizes width : ", String.valueOf(width));
Log.i("jpegSizes height : ", String.valueOf(height));
}
ImageReader reader = ImageReader.newInstance(width, height, ImageFormat.JPEG, 1);
List<Surface> outputSurfaces = new ArrayList<Surface>(2);
outputSurfaces.add(reader.getSurface());
outputSurfaces.add(new Surface(new SurfaceTexture(10)));
final CaptureRequest.Builder captureBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE); // TEMPLATE_VIDEO_SNAPSHOT
captureBuilder.addTarget(reader.getSurface());
captureBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);
这些是jpegSizes数组中的大小。
I/takepic w :: 5312 h : 2988
I/takepic w :: 3984 h : 2988
I/takepic w :: 3264 h : 2448
I/takepic w :: 3264 h : 1836
I/takepic w :: 2560 h : 1920
I/takepic w :: 2048 h : 1152
I/takepic w :: 1920 h : 1080
I/takepic w :: 1280 h : 960
I/takepic w :: 1280 h : 720
I/takepic w :: 800 h : 480
I/takepic w :: 640 h : 480
我尝试了所有这些但总是遇到这个错误:
E / CameraDevice-0-LE:表面大小(w = 1,h = 1)和格式0x1是 无效,尺寸不在有效集中:[1920x1080,1440x1080,1280x720, 1056x864,960x720,800x480,720x480,640x480,352x288,320x240, 176×144]
W / CameraDevice-JV-0:流配置失败
E / CameraCaptureSession:会话0:无法创建捕获会话; 配置失败
请给我任何解决方案。
答案 0 :(得分:0)
在我的情况下,使用 TextureView 而不是 AutoFitTextureView 解决了android 5.0上的大小问题。希望它可以帮到某人。