我正在尝试从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]给出了随机值。 我在做什么错了?
提前谢谢
答案 0 :(得分:0)
缓冲区的大小不必精确地为1280 * 960,因为每行像素之间可以有row stride。也就是说,总大小相差10倍似乎令人惊讶,但并非不可行-检查值是什么。
我建议尝试将Y平面实际绘制到ImageView中(为了进行调试,此操作不需要高效,因此您可以仅使用Bitmap,Canvas和drawColor)以查看其外观。只是完整的垃圾,还是带有奇怪填充的真实Y平面等?