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

Android Camera的callbackbuffer的缓冲区大小需要是图像的8倍大吗?,第1张

概述正如Androiddocument所说:对于除YV12之外的格式,缓冲区大小通过将预览图像宽度,高度和每像素字节相乘来确定.可以从getPreviewSize()读取宽度和高度.可以使用getPreviewFormat()中的图像格式从getBitsPerPixel(int)/8计算每像素的字节数.但大多数在线代码使用bitsperpixel来创

正如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 bufferbyte[]frameBuffer=new byte[frame_bytesize];//buffer registry mCamera.addCallbackBuffer(frameBuffer);

解决方法:

1336320是1.5 X 890880,所以我想象bitsperpixel == 12,并且在使用int for bytesperpixel时你会丢失余数.例如

int bytesperpixel = 12 / 8

将导致1,而不是您需要的1.5.

总结

以上是内存溢出为你收集整理的Android Camera的callbackbuffer的缓冲区大小需要是图像的8倍大吗?全部内容,希望文章能够帮你解决Android Camera的callbackbuffer的缓冲区大小需要是图像的8倍大吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1115538.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存