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(高效率转化)相关推荐

  1. Android开发之虹软人脸识别活体检测SDK包Bitmap转NV21方法

    /** * Bitmap 转化为 ARGB 数据,再转化为 NV21 数据 * * @param src 传入的 Bitmap,格式为 Bitmap.Config.ARGB_8888 * @param ...

  2. android bitmap nv21,Android开发之虹软人脸识别活体检测SDK包Bitmap转NV21方法

    /** * Bitmap 转化为 ARGB 数据,再转化为 NV21 数据 * * @param src 传入的 Bitmap,格式为 Bitmap.Config.ARGB_8888 * @param ...

  3. CameraX API 的 YUV_420_888 图像转换为NV21数据和Bitmap

    CameraX打开相机预览的功能这里不赘述,大家可以在Android官网找到 CameraX 概览  |  Android 开发者  |  Android Developershttps://deve ...

  4. android camera之nv21旋转

    android camera之nv21旋转 这周做的一个android的camera开发,需要获取到视频帧数据,并且需要是nv21格式的byte数组,并且视频帧的图像需要是正方向的.和android相 ...

  5. Android录制视频-nv21转nv12姿势(libyuv使用)

    Android录制视频-nv21转nv12姿势(libyuv使用) 前言 为什么需要转化? libyuv简介 实际使用 1.集成 2.修改代码 3.添加方法 4.项目中使用 总结 前言 近期接触项目当 ...

  6. 第52章,bitmap图像处理(从零开始学android),第52章、Bitmap图像处理(从零开始学Android)...

    1.Drawable → Bitmap public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitma ...

  7. 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 ...

  8. 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 内存复用 | 弱引用 | 引用队列 | 针对不同 Android 版本开发不同的 Bitmap 复用策略 | 工具类代码 )

    文章目录 一.Bitmap 复用池 二.弱引用 Bitmap 内存释放 三.从 Bitmap 复用池中获取对应可以被复用的 Bitmap 对象 1.Android 2.3.3(API 级别 10)及以 ...

  9. 【Android RTMP】NV21 图像旋转处理 ( 快速搭建 RTMP 服务器 Shell 脚本 | 创建 RTMP 服务器镜像 | 浏览器观看直播 | 前置 / 后置摄像头图像旋转效果展示 )

    文章目录 安卓直播推流专栏博客总结 一. 编写快速搭建 RTMP 服务器 Shell 脚本 二. RTMP 快速搭建方法 三.创建阿里云 RTMP 服务器镜像 四.浏览器查看直播内容 五.前置 / 后 ...

最新文章

  1. 为什么需要 外键 呢?
  2. threejs模型可视化编辑器_一个近乎无门槛、零基础的3D场景编辑器
  3. mysql常用sql语句优化
  4. 易语言https服务器,E2EE应用服务器套件 - 文档 - [基础教程] 使用HTTPS(SSL) - E2EE易语言网站敏捷开发框架...
  5. Entity Framework Core 批处理语句
  6. 对那些刷抖音外放音乐的人,就这么治他!| 今日最佳
  7. resnet过拟合_重读经典:完全解析特征学习大杀器ResNet
  8. 前端调用后端接口的错误(400)
  9. pcb布线拐角处打地孔_PCB线路板布线的10个重要规则——公众号【深圳LED网】
  10. Visual C++ 2008入门经典 第四章数组 字符串
  11. laravel 5.1 添加第三方扩展库
  12. 7-290 鸡兔同笼 (10 分)
  13. STL——配接器(adapters)
  14. 破防了,原来这才是机房运维的正确方法
  15. 火车票_ _购买卧铺下铺的总结
  16. Nosql初探(voldemort)
  17. torch.cat() 和 torch.stack()
  18. vultr连接不上ssh的解决方案
  19. 一些实用的安卓UI设计工具
  20. “万金油”的String,为什么不好用了?

热门文章

  1. 无线网络-LTE (02) 通信过程之 Attach procedure
  2. JS JavaScript入门
  3. teamviewer Not ready only LAN 无法连接
  4. 斐波那契数列 python 高阶解法
  5. Vue.config.js开发环境与生产环境配置
  6. 控制儿童在什么时段使用计算机,win10系统设置控制孩子用电脑的时间的图文步骤...
  7. 微信退款返回的几种情况
  8. 如何检查Mac配备的显卡(GPU)?
  9. 【东信北邮成都研发中心】一年Java开发经验面经
  10. 智能驾驶视觉传感器测试:自动驾驶车辆如何进行传感器标定?