来自Android相机照片的字节流大小似乎不正确

时间:2016-01-18 11:08:54

标签: java android camera

我在我的应用中使用Android相机。

  

我的设置

1)我找到了应用窗口的尺寸。

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

(步骤 2 3 SurfaceCreated SurfaceChanged中完成)

2)我将相机预览设置为应用程序大小(在我的情况下为480x800)。

param.setPreviewSize(height, width);

3)我将相机分辨率(图片尺寸)设置为等于预览尺寸。

param.setPictureSize(height, width);

以下是其余参数。

param.setPreviewFormat(ImageFormat.NV21);
camera.setPreviewDisplay(surfaceHolder);
camera.setDisplayOrientation(90);

4)我有处理图像的方法:

public void onPictureTaken(byte[] data, Camera camera) {
    ...
  

我的问题

data(字节流)的长度取决于拍摄的照片(取决于我假设的质量)。

然而我的手机窗口分辨率为480*800(正如我之前所说),但字节流(data)的大小通常约为28000

如果分辨率为480*800,那么我们就是在讨论384000像素。如果每个像素需要Y,U和V值,假设一个字节专用于每个像素,则意味着字节数组(data)的长度应为384000*3 = 1152000

1152000 > 28000。很多!!

这困扰我的原因是因为我使用的方法 s 给定here on SO,用于将这些YUV值转换为RGB值。

我称之为:

int[] rgbs = new int[width*height];
decodeYUV(rgbs, data, width, height);

width, height是应用程序窗口800*480的维度。

我不断获得Array Out of Bounds异常,以及buffer size < minimum等异常。

任何人都知道问题可能是什么?任何帮助将非常感激。

0 个答案:

没有答案