• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-9 06:20:51 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

作为 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);



Best Answer-推荐答案


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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap