【问题标题】:Android: How to save a preview frame as jpeg image?Android:如何将预览帧保存为 jpeg 图像?
【发布时间】:2009-06-23 12:31:05
【问题描述】:

我想将预览帧保存为 jpeg 图像。

我已尝试编写以下代码:

public void onPreviewFrame(byte[] _data, Camera _camera)
{
    if(settings.isRecording())
    {
        Camera.Parameters params = _camera.getParameters();
        params.setPictureFormat(PixelFormat.JPEG);
        _camera.setParameters(params);
        String path = "ImageDir" + frameCount;
        fileRW.setPath(path);
        fileRW.WriteToFile(_data);
        frameCount++;
    }
}

但无法将保存的文件打开为 jpeg 图像。有谁知道如何将预览帧保存为 jpeg 图像?

谢谢

【问题讨论】:

    标签: android camera


    【解决方案1】:

    签出此代码。希望对你有帮助

    camera.setPreviewCallback(new PreviewCallback() {
                        @Override
                        public void onPreviewFrame(byte[] data, Camera camera) {
                            // TODO Auto-generated method stub
                            Camera.Parameters parameters = camera.getParameters();
                            Size size = parameters.getPreviewSize();
                            YuvImage image = new YuvImage(data, ImageFormat.NV21,
                                    size.width, size.height, null);
                            Rect rectangle = new Rect();
                            rectangle.bottom = size.height;
                            rectangle.top = 0;
                            rectangle.left = 0;
                            rectangle.right = size.width;
                            ByteArrayOutputStream out2 = new ByteArrayOutputStream();
                            image.compressToJpeg(rectangle, 100, out2);
                            DataInputStream in = new DataInputStream();
                            in.write(out2.toByteArray());
    
                            }
                        }
    
                    });
                    camera.startPreview();
    

    【讨论】:

      【解决方案2】:

      您必须手动转换它,如果您浏览存档,android-developers 列表上有一些示例 - 主要处理格式(亮度/色度等)转换,然后将图像写入位图,然后保存到一个文件。

      真的有点痛。

      【讨论】:

        【解决方案3】:

        我在预览前用Camera.Parameters.setPreviewFormat(PixelFormat.JPEG)设置了PreviewFormat,但是好像不能真正设置previewformat…… 对了,预览的默认格式是YCbCr_420_SP....

        【讨论】:

          【解决方案4】:

          您必须首先调用 getSupportedPreviewFormats() 检查您的设备支持哪些预览格式。在调用 setPreviewFormat(PixelFormat.JPEG) 之前,请确保支持 JPEG。

          【讨论】:

            【解决方案5】:

            JPEG 不是相机预览的格式。正如official documentation 所说,

            “目前仅支持 ImageFormat.NV21 和 ImageFormat.YUY2”

            为了从相机预览中获取图片,您需要定义预览格式,如下:

            Camera.Parameters parameters;
            parameters.setPreviewFormat(ImageFormat.NV21); //or ImageFormat.YU2
            

            之后,您按照 Dany 的示例压缩并保存 JPEG。

            【讨论】:

              【解决方案6】:

              _data 可能不是 JPEG 格式。您在调用开始预览之前是否调用了Camera.Parameters.setPreviewFormat(PixelFormat.JPEG)

              【讨论】:

              • 所有安卓相机都支持jpeg格式的预览数据
              猜你喜欢
              • 2014-02-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-07-04
              • 2017-01-29
              • 1970-01-01
              • 2018-03-13
              • 2012-07-04
              相关资源
              最近更新 更多