onPictureTaken 和 onPreviewFrame 的数据字节数组大小不同
Posted
技术标签:
【中文标题】onPictureTaken 和 onPreviewFrame 的数据字节数组大小不同【英文标题】:data byte array size different for onPictureTaken and onPreviewFrame 【发布时间】:2015-12-20 01:10:16 【问题描述】:为什么 onPictureTaken(byte[] data, Camera camera) 和 onPreviewFrame(byte[] data, Camera camera) 的数据字节数组大小不同。前者有原始图像,因此给了我一个干净的图像,后者给了我一个像素化的图像。我没有使用 onPictureTaken,因为它有时不会被触发。 如果我的图片尺寸是 1600 x 1400,屏幕尺寸是 800 x 480 onPictureTaken 给我 1600 x 1400 和 onPreviewFrame 给我 800 x 480
这是我的代码:
mCamera.setOneShotPreviewCallback(new Camera.PreviewCallback()
@Override
public void onPreviewFrame(byte[] data, Camera camera)
Camera.Parameters parameters = camera.getParameters();
int format = parameters.getPreviewFormat();
//YUV formats require more conversion
if (format == ImageFormat.NV21 || format == ImageFormat.YUY2 || format == ImageFormat.NV16)
int w = parameters.getPreviewSize().width;
int h = parameters.getPreviewSize().height;
// Get the YuV image
YuvImage yuv_image = new YuvImage(data, format, w, h, null);
我被这个问题困扰了一个星期。
附: - 如果是负面评价,请说明原因
【问题讨论】:
【参考方案1】:为什么 onPictureTaken(byte[] data, Camera camera) 和 onPreviewFrame(byte[] data, Camera camera) 的数据字节数组大小不同。
因为它们是不同编码的不同分辨率的不同图像。如果它们 大小相同,那将是一个小奇迹。
前者有原始图像,因此给我一个干净的图像,后者给我一个像素化图像
预览帧的质量通常较低,因为它们需要以高速捕获。
我没有使用 onPictureTaken,因为它有时不会被触发
虽然我在相机 API 方面遇到了很多问题,但这不是其中之一。
onPreviewFrame 给我 800 x 480
您在setPreviewSize()
on Camera.Parameters
中指定预览分辨率。
【讨论】:
有没有办法将编码的 onPreviewFrame 数组转换为 onPictureTaken ?并且支持的最大预览大小为 800 x 480。在姜饼中,有时很少会触发 onPictureTaken。 @Rohit_Ramkumar:“有没有办法将编码的 onPreviewFrame 数组转换为 onPictureTaken ?” --onPictureTaken()
是一种方法。无法获取预览图像并将其转换为 Java 方法。 “并且支持的最大预览尺寸为 800 x 480”——可能在您的设备上,但预览尺寸因设备而异。
唯一的解决方案是 onPictureTaken() ?我正在尝试为文件拍照并上传。因此文件必须是可读的。
@Rohit_Ramkumar:“唯一的解决方案是 onPictureTaken() ?” -- 如果您关心的是低质量的预览图像,那么是的,这就是onPictureTaken()
的用途。以上是关于onPictureTaken 和 onPreviewFrame 的数据字节数组大小不同的主要内容,如果未能解决你的问题,请参考以下文章
Android camera , onPictureTaken(byte[] imgData, Camera camera) 方法和 PictureCallback 从未调用
在 onPictureTaken 之后旋转 JPEG 的字节数组
PictureCallback 在“onPictureTaken”中获取字节 [] 数据,但它与我在 CameraView 中看到的图像不匹配。