也可以看看这个;

https://www.jianshu.com/p/a6ea929b587c

镜像:

https://blog.csdn.net/quantum7/article/details/79747796


//NV21: YYYY VUVU
byte[] NV21_mirror(byte[] nv21_data, int width, int height)
{int i;int left, right;byte temp;int startPos = 0;// mirror Yfor (i = 0; i < height; i++){left  = startPos;right = startPos + width - 1;while (left < right){temp             = nv21_data[left];nv21_data[left]  = nv21_data[right];nv21_data[right] = temp;left ++;right--;}startPos += width;}// mirror U and Vint offset = width * height;startPos = 0;for (i = 0; i < height / 2; i++){left  = offset + startPos;right = offset + startPos + width - 2;while (left < right){temp             = nv21_data[left ];nv21_data[left ] = nv21_data[right];nv21_data[right] = temp;left ++;right--;temp       = nv21_data[left ];nv21_data[left ] = nv21_data[right];nv21_data[right] = temp;left ++;right--;}startPos += width;}return nv21_data;
}

https://blog.csdn.net/emily2015/article/details/79592920

通过摄像头采集的yuv数据经过旋转处理后,再进行镜像处理。
旋转public class YUV420spRotateUtils {//后置旋转90度;public static byte[] rotateYUVDegree90(byte[] data, int imageWidth, int imageHeight) {byte[] yuv = new byte[imageWidth * imageHeight * 3 / 2];// Rotate the Y lumaint i = 0;for (int x = 0; x < imageWidth; x++) {for (int y = imageHeight - 1; y >= 0; y--) {yuv[i] = data[y * imageWidth + x];i++;}}// Rotate the U and V color componentsi = imageWidth * imageHeight * 3 / 2 - 1;for (int x = imageWidth - 1; x > 0; x = x - 2) {for (int y = 0; y < imageHeight / 2; y++) {yuv[i] = data[(imageWidth * imageHeight) + (y * imageWidth) + x];i--;yuv[i] = data[(imageWidth * imageHeight) + (y * imageWidth) + (x - 1)];i--;}}return yuv;}//前置旋转270度;public static byte[] rotateYUVDegree270(byte[] data, int imageWidth, int imageHeight) {byte[] yuv = new byte[imageWidth * imageHeight * 3 / 2];// Rotate the Y lumaint i = 0;for (int x = imageWidth - 1; x >= 0; x--) {for (int y = 0; y < imageHeight; y++) {yuv[i] = data[y * imageWidth + x];i++;}}// Rotate the U and V color componentsi = imageWidth * imageHeight;for (int x = imageWidth - 1; x > 0; x = x - 2) {for (int y = 0; y < imageHeight / 2; y++) {yuv[i] = data[(imageWidth * imageHeight) + (y * imageWidth) + (x - 1)];i++;yuv[i] = data[(imageWidth * imageHeight) + (y * imageWidth) + x];i++;}}return yuv;}
}
镜像//镜像;public  byte[] frameMirror(byte[] data, int width, int height) {byte tempData;for (int i = 0; i < height * 3 / 2; i++) {for (int j = 0; j < width / 2; j++) {tempData = data[i * width + j];data[i * width + j] = data[(i + 1) * width - 1 - j];data[(i + 1) * width - 1 - j] = tempData;}}return data;}

NV21数据 镜像 旋转相关推荐

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

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

  2. NV21格式图像旋转 c++,平移、缩放实现代码

    文章目录 NV21格式图像旋转 基础知识 逆时针旋转90° NV21格式图像旋转 刚刚接触Android开发,开始学习一些图像像素格式,需要完成 NV21 的图像进行旋转,这里我们将从原理开始分析,分 ...

  3. linux drbd同步,DRBD数据镜像主备节点同步数据

    一.DRBD的安装 2.编译安装 [root@web1 drbd-8.4.6]# yum install kernel kernel-devel kernel-headers flex [root@w ...

  4. linux数据软件,Linux数据安全工具:数据镜像软件DRBD的管理与维护

    原标题:Linux数据安全工具:数据镜像软件DRBD的管理与维护 1.启动DRDB (1)在两个节点执行 在启动DRBD之前,需要分别在两台的hdb1分区上创建供DRBD记录信息的数据块.具体是分别在 ...

  5. 图片文件转Bitmap-Bitmap转NV21-ARGB数据转化为NV21数据

    在Android中有时候需要将本地文件转换为Bitmap 这里提供3种方法 Bitmap bitmap= BitmapFactory.decodeFile("文件路径"); Fil ...

  6. 08 Confluent_Kafka权威指南 第八章:跨集群数据镜像

    文章目录 CHAPTER 8 Cross-Cluster Data Mirror 跨集群数据镜像 Use Cases of Cross-Cluster Mirroring 跨集群镜像用例 Multic ...

  7. kafka传递文件_Kafka权威指南(二)数据传递/数据管道/数据镜像

    可靠的数据传递 可靠性保证 - kafka可以保证分区消息的顺序 - 只有当消息被写入分区的所有同步副本时,才被认为是已提交的 - 只要还有一个副本是活跃的,那么已经提交的消息就不会丢失 - 消费者只 ...

  8. FFmpeg之视频/图片镜像旋转(十三)

    一.视频左右/上下镜像和任意旋转 //mp4向左旋转90度 # ffmpeg -i input.mp4 -metadata:s:v rotate="90" -codec copy ...

  9. drbd配置文件_Linux数据安全工具:数据镜像软件DRBD的安装与配置

    本文授权转载自微信公众号:计算机与网络安全,转载请联系授权. 微信公众号:计算机与网络安全 ID:Computer-network 1.安装环境说明 操作系统统一采用CentOS5.5-x86-64, ...

最新文章

  1. linux只提取前两个目录名,Linux技巧:介绍从目录路径获取文件名和目录前缀的方法...
  2. BZOJ5415:[NOI2018]归程(可持久化并查集,最短路)
  3. 报错 findMergedAnnotation activemq
  4. 花开的声音 - 张靓颖
  5. bash: jps: command not found
  6. MYSQL中的SELECT查询时进行运算
  7. weblogic 解决线程阻塞
  8. java try 性能损耗_Java 中的 try catch 影响性能吗?
  9. matlab GUI 设计
  10. “鱼渔合作”在IT运维中的启示
  11. linux权限不够【操作方案】
  12. 谷歌浏览器:快速切换搜索引擎
  13. LeNet论文阅读笔记
  14. 开启win10隐藏语音库
  15. 【毕业设计】基于单片机的火灾报警系统 -stm32 单片机物联网
  16. php js广告,JavaScript_用JS调用谷歌 AdSense广告的方法, 具体的google广告的js文件做 - phpStudy...
  17. iOS真机不能运行,模拟器可以
  18. BabaSSL:支持半同态加密算法 EC-ElGamal
  19. EOS智能合约开发系列(二)
  20. php邮箱必填,ZBlogPHP-1.5 以上版本修改实现用户评论时必填邮箱的功能

热门文章

  1. MFC中定义全局变量和全局函数的方法
  2. string.h 的实现
  3. handler.post(r)同一个线程的疑惑
  4. 九、Swift对象存储服务(双节点搭建)
  5. android 设置单边框,详解Android用Shape制作单边框图的两种思路和坑
  6. 专题 14 IPC之共享内存
  7. python函数的参数类型,Python函数的主要参数类型
  8. mysql多数据源切换_Springboot项目实现Mysql多数据源切换的完整实例
  9. mllib逻辑回归 spark_Spark架构详解——分布式流计算内存批处理迭代运算框架
  10. linux安装redis教程yum,linux下yum安装redis以及使用