android bitmap nv21,Nv21转Bitmap(高效率转化)
https://blog.csdn.net/qq1137830424/article/details/81980673
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq1137830424/article/details/81980673
前言
在调Camera的时候有个回调方法onPreviewFrame是返回摄像头每一帧的图像数据的,当我们需要对图像数据做处理时就需要Nv21转Bitmap,下面介绍两种方式第一种方式只需要几毫秒时间,第二种方式需要几十毫秒。
第一种方式(高效)
package com.my.camerademo;
import android.content.Context;
import android.graphics.Bitmap;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicYuvToRGB;
import android.renderscript.Type;
public class NV21ToBitmap {
private RenderScript rs;
private ScriptIntrinsicYuvToRGB yuvToRgbIntrinsic;
private Type.Builder yuvType, rgbaType;
private Allocation in, out;
public NV21ToBitmap(Context context) {
rs = RenderScript.create(context);
yuvToRgbIntrinsic = ScriptIntrinsicYuvToRGB.create(rs, Element.U8_4(rs));
}
public Bitmap nv21ToBitmap(byte[] nv21, int width, int height){
if (yuvType == null){
yuvType = new Type.Builder(rs, Element.U8(rs)).setX(nv21.length);
in = Allocation.createTyped(rs, yuvType.create(), Allocation.USAGE_SCRIPT);
rgbaType = new Type.Builder(rs, Element.RGBA_8888(rs)).setX(width).setY(height);
out = Allocation.createTyped(rs, rgbaType.create(), Allocation.USAGE_SCRIPT);
}
in.copyFrom(nv21);
yuvToRgbIntrinsic.setInput(in);
yuvToRgbIntrinsic.forEach(out);
Bitmap bmpout = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
out.copyTo(bmpout);
return bmpout;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
这部分代码参考自https://blog.csdn.net/bluegodisplay/article/details/53431798
第二种方式
private static Bitmap nv21ToBitmap(byte[] nv21, int width, int height) {
Bitmap bitmap = null;
try {
YuvImage image = new YuvImage(nv21, ImageFormat.NV21, width, height, null);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
image.compressToJpeg(new Rect(0, 0, width, height), 80, stream);
bitmap = BitmapFactory.decodeByteArray(stream.toByteArray(), 0, stream.size());
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
————————————————
版权声明:本文为CSDN博主「许柏胜」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq1137830424/article/details/81980673
标签:高效率,Nv21,rs,Bitmap,Allocation,import,android,height
来源: https://blog.csdn.net/haima1998/article/details/101478336
android bitmap nv21,Nv21转Bitmap(高效率转化)相关推荐
- Android开发之虹软人脸识别活体检测SDK包Bitmap转NV21方法
/** * Bitmap 转化为 ARGB 数据,再转化为 NV21 数据 * * @param src 传入的 Bitmap,格式为 Bitmap.Config.ARGB_8888 * @param ...
- android bitmap nv21,Android开发之虹软人脸识别活体检测SDK包Bitmap转NV21方法
/** * Bitmap 转化为 ARGB 数据,再转化为 NV21 数据 * * @param src 传入的 Bitmap,格式为 Bitmap.Config.ARGB_8888 * @param ...
- CameraX API 的 YUV_420_888 图像转换为NV21数据和Bitmap
CameraX打开相机预览的功能这里不赘述,大家可以在Android官网找到 CameraX 概览 | Android 开发者 | Android Developershttps://deve ...
- android camera之nv21旋转
android camera之nv21旋转 这周做的一个android的camera开发,需要获取到视频帧数据,并且需要是nv21格式的byte数组,并且视频帧的图像需要是正方向的.和android相 ...
- Android录制视频-nv21转nv12姿势(libyuv使用)
Android录制视频-nv21转nv12姿势(libyuv使用) 前言 为什么需要转化? libyuv简介 实际使用 1.集成 2.修改代码 3.添加方法 4.项目中使用 总结 前言 近期接触项目当 ...
- 第52章,bitmap图像处理(从零开始学android),第52章、Bitmap图像处理(从零开始学Android)...
1.Drawable → Bitmap public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitma ...
- Android O 8.0 以上 bitmap内存分配
From Android 3.0 (API level 11) through Android 7.1 (API level 25),the pixel data is stored on the D ...
- 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 内存复用 | 弱引用 | 引用队列 | 针对不同 Android 版本开发不同的 Bitmap 复用策略 | 工具类代码 )
文章目录 一.Bitmap 复用池 二.弱引用 Bitmap 内存释放 三.从 Bitmap 复用池中获取对应可以被复用的 Bitmap 对象 1.Android 2.3.3(API 级别 10)及以 ...
- 【Android RTMP】NV21 图像旋转处理 ( 快速搭建 RTMP 服务器 Shell 脚本 | 创建 RTMP 服务器镜像 | 浏览器观看直播 | 前置 / 后置摄像头图像旋转效果展示 )
文章目录 安卓直播推流专栏博客总结 一. 编写快速搭建 RTMP 服务器 Shell 脚本 二. RTMP 快速搭建方法 三.创建阿里云 RTMP 服务器镜像 四.浏览器查看直播内容 五.前置 / 后 ...
最新文章
- 为什么需要 外键 呢?
- threejs模型可视化编辑器_一个近乎无门槛、零基础的3D场景编辑器
- mysql常用sql语句优化
- 易语言https服务器,E2EE应用服务器套件 - 文档 - [基础教程] 使用HTTPS(SSL) - E2EE易语言网站敏捷开发框架...
- Entity Framework Core 批处理语句
- 对那些刷抖音外放音乐的人,就这么治他!| 今日最佳
- resnet过拟合_重读经典:完全解析特征学习大杀器ResNet
- 前端调用后端接口的错误(400)
- pcb布线拐角处打地孔_PCB线路板布线的10个重要规则——公众号【深圳LED网】
- Visual C++ 2008入门经典 第四章数组 字符串
- laravel 5.1 添加第三方扩展库
- 7-290 鸡兔同笼 (10 分)
- STL——配接器(adapters)
- 破防了,原来这才是机房运维的正确方法
- 火车票_ _购买卧铺下铺的总结
- Nosql初探(voldemort)
- torch.cat() 和 torch.stack()
- vultr连接不上ssh的解决方案
- 一些实用的安卓UI设计工具
- “万金油”的String,为什么不好用了?
热门文章
- 无线网络-LTE (02) 通信过程之 Attach procedure
- JS JavaScript入门
- teamviewer Not ready only LAN 无法连接
- 斐波那契数列 python 高阶解法
- Vue.config.js开发环境与生产环境配置
- 控制儿童在什么时段使用计算机,win10系统设置控制孩子用电脑的时间的图文步骤...
- 微信退款返回的几种情况
- 如何检查Mac配备的显卡(GPU)?
- 【东信北邮成都研发中心】一年Java开发经验面经
- 智能驾驶视觉传感器测试:自动驾驶车辆如何进行传感器标定?