Android:如何从SurfaceView保存第一个预览帧

Android:如何从SurfaceView保存第一个预览帧,android,bitmap,camera,Android,Bitmap,Camera,我想知道是否可以保存相机预览中的第一帧,它可以在表面视图上看到。 在我的活动中,我目前已经实现了所有的SurfaceHolder.Callback方法。当我在camera对象上调用startPreview而不是takePicture时,回调会正确执行,但我需要更快地拍摄和保存图片,因此拍摄预览的第一个可见帧将非常有用。 我能做什么? 任何建议都将不胜感激。这可能看起来非常简单,但我会这样做,将第一帧保存到位图中 mCamera.setPreviewCallback(new PreviewCall

我想知道是否可以保存相机预览中的
第一帧
,它可以在
表面视图
上看到。 在我的活动中,我目前已经实现了所有的
SurfaceHolder.Callback
方法。当我在camera对象上调用
startPreview
而不是
takePicture
时,回调会正确执行,但我需要更快地拍摄和保存图片,因此拍摄预览的第一个可见帧将非常有用。 我能做什么?

任何建议都将不胜感激。

这可能看起来非常简单,但我会这样做,将第一帧保存到
位图中

mCamera.setPreviewCallback(new PreviewCallback() {
                public void onPreviewFrame(byte[] data, Camera camera) {

                    if (image == null) {
                        out = new ByteArrayOutputStream();
                        yuvImage = new YuvImage(data, ImageFormat.NV21, camera
                                .getParameters().getPreviewSize().width, camera
                                .getParameters().getPreviewSize().height, null);

                        yuvImage.compressToJpeg(new Rect(0, 0, camera
                                .getParameters().getPreviewSize().width, camera
                                .getParameters().getPreviewSize().height), 0,
                                out);

                        imageBytes = out.toByteArray();
                        image = BitmapFactory.decodeByteArray(imageBytes, 0,
                                imageBytes.length);
                    }

                }
            });

我试过你们的代码,它可以工作,但图像的分辨率很低。我尝试将ImageFormat更改为JPEG,但不受支持。我能做什么?您是否已将
PreviewSize
设置为
SurfaceChanged
中合适的值?如果不是,请将其设置为surfaceholder的宽度和高度。如果你愿意,我可以提供一些示例代码,我目前正在使用
SurfaceView
进行一些工作。我尝试设置这些参数,但图像没有改变,而且是像素化的。