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
中指定预览分辨率。
为什么 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
中指定预览分辨率。