我正在使用Android的Camera
和SurfaceView
在拍照前向用户显示预览图像。这在屏幕上看起来很好,但是当我拍摄照片时,生成的jpg已损坏(水平线)。
作为起点,我使用了Mark Murphy的相机/图片example,它在G2上展示了相同的问题。
相机参数:
预览尺寸:800x480
图片格式:JPEG
根据getSupportedPreviewSizes()
和getSupportedPictureFormats()
Nexus One具有相同尺寸的屏幕,可以使用相同的参数正常工作。
将预览尺寸设置为640x480
时,G2可正常工作我的问题:之前是否有其他人遇到此问题(尽管使用支持的设置,图像已损坏)?它有多频繁?你是怎么解决它的?
答案 0 :(得分:0)
到目前为止,我遇到了同样的问题,现在我设法使用
来修复我的问题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。
http://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);