Android Camera2从预览图像获取nv21字节数组

时间:2019-03-21 12:17:35

标签: android android-camera2

我正在尝试从camera2 API的预览框中获取黑白值(Y平面)。这是我到目前为止的内容:

public void onImageAvailable(ImageReader, reader) {
   Image image = reader.acquireLatestImage();
   Image.Plane[] planes = image.getPlanes();
   ByteBuffer yPlane = planes[0].getBuffer();
   if (firstRun) {
      ySize = yPlane.remaining();
      nv21 = new byte[ySize];
   }
   yPlane.get(nv21, 0, ySize);
   Log.i(TAG, String.valueOf(nv21.length) + " " + String.valueOf(nv21[0]));
   image.close();
}

但是,数组的长度不符合预期(1280 * 960 = 1 228 800,nv21.length返回12 979 200),nv21 [0]给出了随机值。 我在做什么错了?

提前谢谢

1 个答案:

答案 0 :(得分:0)

缓冲区的大小不必精确地为1280 * 960,因为每行像素之间可以有row stride。也就是说,总大小相差10倍似乎令人惊讶,但并非不可行-检查值是什么。

我建议尝试将Y平面实际绘制到ImageView中(为了进行调试,此操作不需要高效,因此您可以仅使用Bitmap,Canvas和drawColor)以查看其外观。只是完整的垃圾,还是带有奇怪填充的真实Y平面等?