Android相机预览正在破坏G2上的图像输出



我使用Android的CameraSurfaceView在拍照前向用户显示预览图像。这在屏幕上看起来很好,但当我拍照时,结果jpg被损坏(水平线)。

作为起点,我使用了Mark Murphy的Camera/Picture示例,该示例在G2上显示了相同的问题。

相机参数:

预览尺寸:800x480

图片格式:JPEG

根据getSupportedPreviewSizes()getSupportedPictureFormats()

支持。

屏幕大小相同的Nexus One,使用相同的参数也能正常工作。

将预览大小设置为640x480时,G2正常工作

我的问题:有没有其他人遇到这个问题之前(损坏的图像,尽管使用支持的设置)?多久一次?你是如何解决这个问题的?

到目前为止,我有同样的问题,现在我设法修复我使用

setPictureFormat(ImageFormat.JPEG);

相机参数设置。

最近才发现相机默认的图片输出是YUV。这就是为什么它在预览时显示完美,但一旦拍摄,你会得到绿色或粉红色或损坏的图像输出。这些是相机可能支持的ImageFormat值。

JPEG = 256;
NV16 = 16;
NV21 = 17;
RAW10 = 37;
RAW_SENSOR = 32;
RGB_565 = 4;
UNKNOWN = 0;
YUV_420_888 = 35;
YUY2 = 20;
YV12 = 842094169;

所以除了支持的大小,在某些情况下,我们可能还需要检查PictureFormat。

https://i.stack.imgur.com/PlHFH.png

这些只是使用ImageFormat YUV拍摄的示例图像,因此将其保存为JPEG压缩。

但是在任何情况下,你不想改变ImageFormat,从而保持YUV格式的设置,你可能需要保存图像在这个解决方案:

Camera.Parameters parameters = camera.getParameters();
Camera.Size size = parameters.getPreviewSize();
YuvImage image = new YuvImage(data, parameters.getPreviewFormat(),
                    size.width, size.height, null);
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "YuvImage.jpg");
FileOutptStream filecon = new FileOutputStream(file);
image.compressToJpeg(new Rect(0, 0, image.getWidth(), image.getHeight()), 90,
                    filecon);

相关内容

  • 没有找到相关文章

最新更新