获取相机回调数据

        @Overridepublic void onPreviewFrame(byte[] data, Camera camera) {//这里的data便是原始视频数据}

将视频数据转化为bitmap

    public Bitmap nv21ToBitmap(byte[] nv21, int width, int height){if (yuvType == null){yuvType = new Type.Builder(renderScript, Element.U8(renderScript)).setX(nv21.length);in = Allocation.createTyped(renderScript, yuvType.create(), Allocation.USAGE_SCRIPT);rgbaType = new Type.Builder(renderScript, Element.RGBA_8888(renderScript)).setX(width).setY(height);out = Allocation.createTyped(renderScript, 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;}

在bitmap上写字(水印) 然后将bitmap转化为NV21数据推送出去

   byte[] bitmapToNv21(int inputWidth, int inputHeight, Bitmap scaled) {int[] argb = new int[inputWidth * inputHeight];scaled.getPixels(argb, 0, inputWidth, 0, 0, inputWidth, inputHeight);byte[] yuv = new byte[inputWidth * inputHeight * 3 / 2];encodeYUV420SP(yuv, argb, inputWidth, inputHeight);scaled.recycle();return yuv;}public  void encodeYUV420SP(byte[] yuv420sp, int[] argb, int width, int height) {final int frameSize = width * height;int yIndex = 0;int uvIndex = frameSize;int a, R, G, B, Y, U, V;int index = 0;for (int j = 0; j < height; j++) {for (int i = 0; i < width; i++) {a = (argb[index] & 0xff000000) >> 24; // a is not used obviouslyR = (argb[index] & 0xff0000) >> 16;G = (argb[index] & 0xff00) >> 8;B = (argb[index] & 0xff) >> 0;// well known RGB to YUV algorithmY = ( (  66 * R + 129 * G +  25 * B + 128) >> 8) +  16;U = ( ( -38 * R -  74 * G + 112 * B + 128) >> 8) + 128;V = ( ( 112 * R -  94 * G -  18 * B + 128) >> 8) + 128;// NV21 has a plane of Y and interleaved planes of VU each sampled by a factor of 2//    meaning for every 4 Y pixels there are 1 V and 1 U.  Note the sampling is every other//    pixel AND every other scanline.yuv420sp[yIndex++] = (byte) ((Y < 0) ? 0 : ((Y > 255) ? 255 : Y));if (j % 2 == 0 && index % 2 == 0) {yuv420sp[uvIndex++] = (byte)((V<0) ? 0 : ((V > 255) ? 255 : V));yuv420sp[uvIndex++] = (byte)((U<0) ? 0 : ((U > 255) ? 255 : U));}index ++;}}}//处理private byte[] parseByte(byte[] dst) {Bitmap bitmapAll = nv21ToBitmap(dst, mVideoParameters.width, mVideoParameters.height);Bitmap bitmapAllNew=bitmapAll.copy(Bitmap.Config.ARGB_8888,true);Canvas canvas = new Canvas(bitmapAllNew);Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);paint.setColor(Color.WHITE);paint.setTextSize(30);canvas.drawText(name, mVideoParameters.width/2 -40, 60, paint);byte[] newBytes = bitmapToNv21(mVideoParameters.width, mVideoParameters.height,bitmapAllNew);if(newBytes!=null){return newBytes;}else{return null;}}

结束!

Android NV21与Bitmap相互转换 可实时添加水印相关推荐

  1. android bitmap nv21,Nv21转Bitmap(高效率转化)

    https://blog.csdn.net/qq1137830424/article/details/81980673 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附 ...

  2. 简介Bitmap、YUV,NV21与Bitmap互转

    1. Bitmap 1.1Bitmap简介 关于Bitmap,它和Drawable差不多就是一种图片,Bitmap相关的使用主要有两种: 给ImageView设置背景 当做画布来使用 分别对应下面两个 ...

  3. Image、Byte[]、Bitmap相互转换

    Image.Byte[].Bitmap相互转换 /// <summary>         /// 将图片Image转换成Byte[]         /// </summary&g ...

  4. Android下利用Bitmap切割图片

    在自己自定义的一个组件中由于需要用图片显示数字编号,而当前图片就只有一张,上面有0-9是个数字,于是不得不考虑将其中一个个的数字切割下来,需要显示什么数字,只需要组合一下就好了. 下面是程序的关键代码 ...

  5. android bitmap 替换指定颜色,Android 实现把bitmap图片的某一部分的颜色改成其他颜色...

    把bitmap图片的某一部分的颜色改成其他颜色 private Bitmap ChangeBitmap(Bitmap bitmap){ int bitmap_h; int bitmap_w; int ...

  6. Android pdf转换bitmap保存到本地

    Android pdf转换bitmap保存到本地 PDF转换成图片保存到本地 Android有自带的API提供 首先要把PDF文件下载到本地,下载成功使用 下载就最简单的IO下载都行 例如: try ...

  7. android集成EasyPlayer播放器播放实时流媒体视屏

    android集成EasyPlayer播放器播放实时流媒体视屏 最近公司项目需要实现一个rtsp实时流媒体视频的播放,在移动端尝试了多个第三方能播放rtsp流实时视频的软件后发现EasyPlayer的 ...

  8. Android 高效显示Bitmap图片

    Android 高效显示Bitmap图片 本文会介绍一些处理与加载Bitmap对象的常用方法,这些技术能够使得程序的UI不会被阻塞,并且可以避免程序超出内存限制.如果我们不注意这些,Bitmap会迅速 ...

  9. android bitmap 替换指定颜色,Android实现把bitmap图片的某一部分的颜色改成其他颜色的方法...

    Android实现把bitmap图片的某一部分的颜色改成其他颜色的方法 发布时间:2020-07-29 14:11:15 来源:亿速云 阅读:107 作者:小猪 这篇文章主要讲解了Android实现把 ...

最新文章

  1. nginx 重写 隐藏index.php
  2. Golang 1.14 发布 | 云原生生态周报 Vol. 39
  3. 【网址收藏】k8s中helm方式安装postgresql及pgadmin
  4. Python中可变类型和不可变类型的数据?
  5. android studio 2.3 instant run,android studio 2.3 instant run not working
  6. 移动云正式发布基于龙蜥 Anolis OS 的 BC-Linux V8.2 通用版操作系统
  7. 基于java springboot博客交流平台系统设计和实现
  8. java中多态含有math类_Java面试题汇总《Java基础、语法51-55》
  9. 计算机中内存存储器最小单位,计算机中存储容量的最小单位和最基本单位是什么?...
  10. 计算机视觉论文-2021-03-10
  11. 高德地图GPS经纬度转高德经纬度
  12. 3d打印英语文献_万华推出可3D打印PP粉末材料
  13. 内网穿透NPS使用教程
  14. T检验和F检验\自由度
  15. 格力悄悄上架“大松5G手机”董明珠又杀回手机圈了?
  16. 一种焊盘的补偿结构分析
  17. 灵巧好用的手机便签软件
  18. win8.1服务器系统安装教程,win8.1安装iis图文教程
  19. jenkins插件下载镜像加速
  20. Cannot open compressed file when install R packages(安装R语言是提示不能解压)

热门文章

  1. wxFormBuilder + wxPython 工具开发第二章-日记本工具数据连接与展示
  2. Linux服务器如何查看CPU占用率、内存占用、带宽占用
  3. pstack无法查看进程堆栈“Could not attach to target”问题
  4. 解决Error: ENOENT: no such file or directory, scandir 安装node-sass报错
  5. QT界面完成录音与播放功能以及环境配置
  6. 通过FME实现零代码获取地图POI数据
  7. 【Android】带可输入功能的下拉框EditSpinner,附带Filter功能
  8. CTFshow命令执行29-123
  9. 多种方法爬取猫眼电影并分析(附代码)
  10. 拼音翻译成阿拉伯数字