我在我的应用中使用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
等异常。
任何人都知道问题可能是什么?任何帮助将非常感激。