2011-08-06 27 views
0

我使用Android的CameraSurfaceView在拍摄照片之前向用户显示预览图像。这在屏幕上显示得很好,但是当我拍摄照片时,生成的jpg已损坏(水平线)。Android Camera Preview正在破坏G2上的图像输出?

作为一个起点,我使用了Mark Murphy的Camera/Picture example,它在G2上表现出同样的问题。

相机PARAMATERS:

预览大小:800×480

图片格式:JPEG

两个参数都根据getSupportedPreviewSizes()getSupportedPictureFormats()

的Nexus之一支承,具有相同尺寸的屏幕,使用相同的参数正确工作。设置预览大小为640x480

我的问题时

的G2正常工作:有没有其他人遇到此之前的问题(已损坏的图像尽管使用支持的设置)?它有多频繁?你是如何解决它的?

+0

我现在并没有一个G2因此无法回答这个问题 - 对不起! – CommonsWare

+0

@CommonsWare但你曾经在其他设备上看到过这个问题?我希望它不常见,即将推出的Android 2.3更新修复了它。 “ – smith324

+0

”但你曾经在其他设备上看到过这个问题? - 不。 – CommonsWare

回答

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); 
相关问题