博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 关于获取摄像头帧数据解码
阅读量:6568 次
发布时间:2019-06-24

本文共 893 字,大约阅读时间需要 2 分钟。

由于Android下摄像头预览数据只能  ImageFormat.NV21 格式的,所以解码时要经过一翻周折.

 

Camera mCamera = Camera.open();
Camera.Parameters p = mCamera.getParameters();
p.setPreviewFormat(ImageFormat.NV21);
/*这是唯一值,也可以不设置。有些同学可能设置成 PixelFormat 下面的一个值,其实是不对的,具体的可以看官方文档*/
mCamera.setParameters(p);
mCamera.startPreview();

  

下面是解码核心部分:

  
@Override
  
public 
void 
onPreviewFrame(
byte
[] data, Camera camera) {       
      
Size size = camera.getParameters().getPreviewSize();       
      
try
{
          
YuvImage image =
new 
YuvImage(data, ImageFormat.NV21, size.width, size.height,
null
);
          
if
(image!=
null
){
              
ByteArrayOutputStream stream =
new 
ByteArrayOutputStream();
              
image.compressToJpeg(
new 
Rect(
0
,
0
, size.width, size.height),
80
, stream);
              
Bitmap bmp = BitmapFactory.decodeByteArray(stream.toByteArray(),
0
, stream.size());
 
                   
stream.close();
          
}
      
}
catch
(Exception ex){
          
Log.e(
"Sys"
,
"Error:"
+ex.getMessage());
      
}
  
}

代码很简单。就是把YUV数据转成 Bitmap 就行了,系统提供 YuvImage 类。

转载地址:http://hqpjo.baihongyu.com/

你可能感兴趣的文章
浏览器缓存机制
查看>>
报表使用分组
查看>>
指尖下的js ——多触式web前端开发之二:处理简单手势
查看>>
获取json
查看>>
云计算VDI相关职位招聘
查看>>
ORACLE Recyclebin管理及flashback recyclebin中的对象
查看>>
linux 常用find命令
查看>>
C#使用sqlite的遇到的问题
查看>>
Unix环境高级编程(二十一)数据库函数库
查看>>
Javascript获取最近若干个月
查看>>
fcitx输入法在wps、wineqq中失灵问题的解决
查看>>
集合元素顺序的实现
查看>>
webpack热更新实现
查看>>
如何在Window下安装node\npm\cnpm,并安装vue.js,创建项目
查看>>
两个像素,
查看>>
有损,无损,
查看>>
tableview 展开
查看>>
谎言,
查看>>
redis缓存存在的隐患及其解决方案
查看>>
table中嵌套table,如何用jquery来控制奇偶行颜色
查看>>