【问题标题】:Android Camera Preview is corrupting image output on G2?Android Camera Preview 会破坏 G2 上的图像输出?
【发布时间】:2023-03-27 03:32:01
【问题描述】:

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

作为起点,我使用了 Mark Murphy 的相机/图片example,它在 G2 上也出现了同样的问题。

相机参数:

预览尺寸:800x480

图片格式:JPEG

根据getSupportedPreviewSizes()getSupportedPictureFormats() 支持这两个参数

具有相同尺寸屏幕的 Nexus One 可以在相同参数下正常工作。

将预览尺寸设置为 640x480 时,G2 可以正常工作

我的问题:之前有没有其他人遇到过这个问题(尽管使用了受支持的设置,但图像损坏)?它有多频繁?你是怎么解决的?

【问题讨论】:

  • 我目前没有 G2,因此无法回答这个问题——抱歉!
  • @CommonsWare 但是你没有在其他设备上看到这个问题?我希望它不常见,即将到来的 Android 2.3 更新修复它。
  • "但是你没有在其他设备上看到过这个问题?" -- 不。

标签: android android-camera commonsware


【解决方案1】:

到目前为止,我遇到了同样的问题,现在我设法解决了我的问题

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);

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    相关资源
    最近更新 更多