onPictureTaken 和 onPreviewFrame 的数据字节数组大小不同

data byte array size different for onPictureTaken and onPreviewFrame

为什么 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);
}

这个问题困扰我一周了

P.S。 - 如果出现负面评价,请说明原因

Why is the data byte array size different for onPictureTaken(byte[] data, Camera camera) and onPreviewFrame(byte[] data, Camera camera).

因为它们是在不同编码下具有不同分辨率的不同图像。如果它们 大小相同,那将是一个小小的奇迹。

The former has the original image and hence gives me a clean image and the latter gives me a pixelated image

预览帧通常质量较低,因为它们需要以高速捕获。

I am not using onPictureTaken because it does not get triggered sometimes

虽然我在相机 API 方面遇到过很多问题,但这不是其中之一。

onPreviewFrame gives me 800 x 480

您在 setPreviewSize() on Camera.Parameters 中指定预览分辨率。