8

我想将预览帧保存为 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 图像?

谢谢

4

6 回答 6

8

签出此代码。我希望它有帮助

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();
于 2011-12-16T13:14:19.380 回答
1

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

这一切真的有点痛苦。

于 2010-09-14T10:59:31.470 回答
0

I set the PreviewFormat with Camera.Parameters.setPreviewFormat(PixelFormat.JPEG) before preview,but it seems that it can't really set the previewformat...... By the way, the default format of the preview is YCbCr_420_SP....

于 2009-09-16T08:57:53.490 回答
0

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

于 2011-07-13T08:44:28.870 回答
0

JPEG 不是相机预览的格式。正如官方文档所说,

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

为了从 Camera Preview 中获取图片,您需要定义预览格式,如下所示:

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

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

于 2016-02-07T21:29:06.053 回答
-1

_data 可能不是 JPEG 格式。你 Camera.Parameters.setPreviewFormat(PixelFormat.JPEG)在打电话开始预览之前打电话了吗?

于 2009-06-24T18:53:11.040 回答