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
进行一些工作。我尝试设置这些参数,但图像没有改变,而且是像素化的。