
正如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倍大吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)