android - Android Camera 的 callbackbuffer 的缓冲区大小需要是图像的 8 倍吗?

标签 android camera

作为Android document说:

对于 YV12 以外的格式,缓冲区的大小由预览图像宽度、高度和每像素字节数的乘积决定。可以从 getPreviewSize() 读取宽度和高度。每像素字节数可以使用 getPreviewFormat() 中的图像格式从 getBitsPerPixel(int)/8 计算得出。

但是大多数在线代码使用bitsperpixel 来创建缓冲区而不是byteperpixel=bitsperpixel/8

如果我使用以下代码并使用图像的确切字节大小,将导致错误:E/Camera-JNI(3656): 回调缓冲区太小!预期 1336320 字节,但得到 890880 字节!这是为什么?为什么缓冲区需要是图像大小的 8 倍?

Camera.Parameters parameters=mCamera.getParameters();
parameters.setPreviewSize(width,height);
mCamera.setParameters(parameters);

int previewFormat=parameters.getPreviewFormat();
int bitsperpixel=ImageFormat.getBitsPerPixel(previewFormat);
int byteperpixel=bitsperpixel/8;
Camera.Size camerasize=parameters.getPreviewSize();
int frame_bytesize=((camerasize.width*camerasize.height)*byteperpixel);

//create buffer
byte[]frameBuffer=new byte[frame_bytesize];

//buffer registry 
mCamera.addCallbackBuffer(frameBuffer);

最佳答案

1336320 是 1.5 X 890880,所以我想 bitsperpixel == 12,并且在将 int 用于 bytesperpixel 时,您将失去余数。例如

int bytesperpixel = 12 / 8

结果为 1,而不是您需要的 1.5。

关于android - Android Camera 的 callbackbuffer 的缓冲区大小需要是图像的 8 倍吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14538871/

相关文章:

android - 在选项卡内激活相机(android)

iphone - 如何在相机 View 上添加图层,以根据设备的位置显示带有地理位置数据的标签,例如在 ZipRealty 房地产应用程序中

java - 查看 Wi-Fi 是否已启用并已连接

android - 我可以依靠自动移动调整来进行响应式设计吗

android - 如何在没有任何延迟的情况下在android中循环播放音频文件?

Android Camera2 API 切换回 - 前置摄像头

ios - Google Photo Sphere 相机功能

java - Android如何在单击按钮时更改底部导航项的颜色

生成弹出消息时android振动或发出哔哔声

java - 自定义相机应用程序在拍摄2-3张照片后停止工作,没有错误消息