代码之家  ›  专栏  ›  技术社区  ›  Niko Gamulin

Android:如何将预览帧保存为jpeg图像?

  •  6
  • Niko Gamulin  · 技术社区  · 15 年前

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

    谢谢

    6 回复  |  直到 12 年前
        1
  •  8
  •   Dany's    13 年前

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

    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
  •  1
  •   piemmm    14 年前

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

    真的有点痛苦。

        3
  •  0
  •   dakui dakui    15 年前

    我将预览格式设置为Camera.Parameters.setPreviewFormat设置预览格式(像素格式.JPEG)在预览之前,但似乎无法真正设置预览格式。。。。。。

        4
  •  0
  •   artsylar    13 年前

    您必须首先通过调用来检查设备支持的预览格式 getSupportedPreviewFormats() . 在调用之前,请确保支持JPEG .

        5
  •  0
  •   Marko    8 年前

    official documentation 说,

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

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

    之后,压缩并保存JPEG,如Dany的示例所示。

        6
  •  -1
  •   hacken    15 年前

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