android关于获取摄像头帧数据转成图片

第一部分:

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

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

 

方式一:系统SDK2.2自带解码方式

    @Overridepublic 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 类。

 

方式二:人工解码方式

public Bitmap rawByteArray2RGBABitmap2(byte[] data, int width, int height) {int frameSize = width * height;int[] rgba = new int[frameSize];for (int i = 0; i < height; i++)for (int j = 0; j < width; j++) {int y = (0xff & ((int) data[i * width + j]));int u = (0xff & ((int) data[frameSize + (i >> 1) * width + (j & ~1) + 0]));int v = (0xff & ((int) data[frameSize + (i >> 1) * width + (j & ~1) + 1]));y = y < 16 ? 16 : y;int r = Math.round(1.164f * (y - 16) + 1.596f * (v - 128));int g = Math.round(1.164f * (y - 16) - 0.813f * (v - 128) - 0.391f * (u - 128));int b = Math.round(1.164f * (y - 16) + 2.018f * (u - 128));r = r < 0 ? 0 : (r > 255 ? 255 : r);g = g < 0 ? 0 : (g > 255 ? 255 : g);b = b < 0 ? 0 : (b > 255 ? 255 : b);rgba[i * width + j] = 0xff000000 + (b << 16) + (g << 8) + r;}Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);bmp.setPixels(rgba, 0 , width, 0, 0, width, height);return bmp;}

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Entity Framework Core 6.0 预览4 性能改进

起因微软在Build2021开发者大会上,发布Entity Framework Core 6.0(简称EFCore 6)预览第四版,号称是性能版本,性能提升主要对于Entity Framework Core 5.性能改进:EFCore 5.0和EFCore 6.0基准测试,提升了70%.在查询时,比EFCore5.0提升了31%.内存改进了不少,减少43%.减少内存分配…

这个地球仪太惊艳了,陪孩子畅聊天文地理。

▲数据汪特别推荐点击上图进入玩酷屋一个人一旦对某事物有了浓厚的兴趣&#xff0c;就会主动去求知、去探索、去实践&#xff0c;并在求知、探索、实践中产生愉快的情绪和体验。所以&#xff0c;古今中外的教育家无不重视兴趣在智力开发中的作用。小木之前推荐过一款AR地球仪&a…

两篇很牛的vim使用技巧

2019独角兽企业重金招聘Python工程师标准>>> 读本文之前请注意&#xff1a; 1. 本文的目标是提供一些vim的使用技巧&#xff0c;利用这些技巧可以提高vim的操作效率。部分技巧在vi上也可以使用&#xff0c;但是现在基本上都是用vim了。 2. 本文是整理和总结使用技巧…

日志组件DotNetCommon.Filelog

介绍根据Microsoft.Extensions.Logging.Console改造的本地文件日志输出组件&#xff0c;轻量便捷&#xff0c;运行平台&#xff1a;asp.net core。1. 为什么要写这个项目&#xff0c;开源的日志组件不够用吗&#xff1f;第一&#xff1a;微软提供了一个很好的日志输出框架&…

辍学程序员改变世界,这位长得像马云的90后要击败Facebook的扎克伯格了…

全世界只有3.14 % 的人关注了数据与算法之美众所周知&#xff0c;Facebook的创始人扎克伯格&#xff08;Mark Zuckerberg&#xff09;&#xff0c;是史上最年轻的世界亿万富豪。小扎作为社交网络时代的的缔造者&#xff0c;成为了当之无愧的程序员界80后杰出代表。但数据汪今天…

java十六进制大小端转换_字节顺序

1、定义 字节顺序,又称端序或尾序(英语:Endianness),在计算机科学领域中,指电脑内存中或在数字通信链路中,组成多字节的字的字节的排列顺序。 在几乎所有的机器上,多字节对象都被存储为连续的字节序列。 2、表现形式 字节的排列方式有两个通用规则。例如,将一个多位数的…

Android开发入门之学习笔记(三):程序窗口的布局

2019独角兽企业重金招聘Python工程师标准>>> Android应用程序的用户界面可以看作是由View和View Group组成的&#xff0c;从字面意思上就可以看出&#xff0c;View Group是可以包含多个View的。借用官方教程的图可以更容易理解&#xff1a; 说到这里&#xff0c;我…

c#爬虫-解决ChromeDriver 版本问题

问题Selenium c# 进行爬虫时报错 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 84产生问题的原因因为下载的ChromeDriver版本与本地chrome浏览器的版本不一致导致的。因…

用gradle启动java项目_构建Java项目

#构建Java项目#上一节我们简要介绍了如何编写一个单机的To Do应用&#xff0c;接下来要打包部署成可执行的应用&#xff0c;我们需要编译源代码&#xff0c;生成的class文件需要打包到JAR文件中。JDK提供了javac 和jar工具帮助你实现这些任务&#xff0c;但是你也不想每次源代码…

今天,滴滴被爆亏损109亿,需裁员2000多人,哪些员工会被裁掉?

全世界只有3.14 % 的人关注了数据与算法之美近日&#xff0c;一份滴滴出行内部流传出来的财务数据显示&#xff0c;该公司2018年持续巨额亏损&#xff0c;全年亏损高达109亿元人民币。若消息属实&#xff0c;那将说明&#xff0c;自2012年滴滴成立以来就一直处于亏损状态&#…

ftp服务器搭建遇到的问题

FAQ&#xff1a;vsftpd.rpm包安装之后&#xff0c;启动服务&#xff0c;不能在网页里看到pub目录 A&#xff1a; 关闭selinux、iptables服务再试试 FAQ&#xff1a;能看到其他人的家目录&#xff0c;没有成功的把用户锁定到自己的家目录下 A&#xff1a; 配置文件手动更改默认…

C#中Lock的秘密

一、概要本文主要讲解在c#中lock关键字的用法以及需要注意的坑。帮助大家避免使用不当造成的bug。作用&#xff1a;lock 关键字可以用来确保代码块完成运行&#xff0c;而不会被其他线程中断。它可以把一段代码定义为互斥段&#xff08;critical p&#xff09;&#xff0c;互斥…

限时秒杀┃“探月计划”来袭,美国米德天文望远镜助孩子观月赏月

▲数据汪特别推荐点击上图进入玩酷屋孩子对于未知的世界充满了好奇&#xff0c;尤其是对于月亮&#xff0c;总是有问不完的问题。例如月亮上是怎么样的&#xff1f;怎么很多人说十五的月亮十六圆&#xff1f;月亮有动物吗&#xff1f;不是说有月兔吗&#xff1f;月亮怎么有时是…

foreach和IEnumerable+yield和IEnumerator

C#里&#xff0c;foreach可以算是个高一等级的循环&#xff0c;因为想要使用foreach必须实现IEnumberable&#xff0c;然后还需要在这个接口的唯一方法中&#xff0c;用yield return返回元素&#xff0c;才能达到foreach的循环效果。class MyList : IEnumerable{string[] arr …

话里话外:企业管理软件的方案设计要规避哪些风险

博主推荐延展咨询资深顾问 梁云文章 企业管理软件作为帮助企业管理者优化工作流程&#xff0c;改善管理水平的信息化工具&#xff0c;现如今被大多数的企业接受并在不同层面进行了应用。作为企业管理软件的方案设计者&#xff0c;我们必须从企业管理者、软件操作者的不同视…

java使用zmodem_SecureCRT 中使用zmodem和Linux服务器交换文件

注意&#xff1a;Linux在默认安装的情况下是没有sz和rz这两条指令的&#xff0c;rmp包为&#xff1a;lrzsz-xx.xx-xxx.rpm&#xff0c;用rmp –q lrzsz查看是否安装&#xff0c;没有的话安装&#xff1a;命令&#xff1a;rpm –ivh lrzsz-xx.xx-xxx.rpm安装后查看&#xff1a;1…

每次有人来家里,总有人问我这个积木在哪买的

▲数据汪特别推荐点击上图进入玩酷屋作为一名资深积木达人&#xff0c;小木我可是大大小小的积木阅览无数&#xff0c;当然乐高也不会放过&#xff0c;虽然“钱包君”已经是路人了。&#xff08;每月的工资用来买乐高~&#xff09;之前给大家推荐了一款STEAM积木&#xff0c;小…

NET问答: 为什么时间格式 dd/MM/yyyy 转成 DateTime 会报错?

咨询区 Shantanu Gupta&#xff1a;我在项目中碰到了一个需求&#xff0c;需要将字符串格式的 dd/MM/yyyy 转成 DateTime&#xff0c;比如下面这样&#xff1a;class Program{static void Main(string[] args){var str "22/11/2009";DateTime date DateTime.Parse(s…

Gallery with Video

2019独角兽企业重金招聘Python工程师标准>>> 实现较为完整的图片展示和视频播放功能&#xff08;Image and video gallery&#xff09;&#xff0c;在FGallery-iPhone&#xff08; http://code4app.com/codesample/4f67f4546803fa6d45000001&#xff09;代码的基础上…

实用Python库,这几个你认识不?

近几年Python已成为数据科学行业中大火的编程语言。而作为人工智能核心的机器学习&#xff0c;是一门多领域的交叉学科&#xff0c;专门研究计算机模拟或实现人类学习行为的方法&#xff0c;以获取新的知识或技能&#xff0c;重新组织已有的知识结构使之不断改善自身的性能。简…