将yuv数据旋转90度 180度 270度 您所在的位置:网站首页 安卓bitmap出现花屏 将yuv数据旋转90度 180度 270度

将yuv数据旋转90度 180度 270度

2024-07-03 12:21| 来源: 网络整理| 查看: 265

这两天在做yuv数据推流。我这里是从camera2获取的image转yuv(nv21)数据,推流上去发现图像逆时针旋转了90度,网上一大堆都是对预览方向调整的。然后找了好多对yuv数据旋转的算法。

链接: https://stackoverflow.com/questions/14167976/rotate-an-yuv-byte-array-on-android. 这里面介绍了关于yuv数据旋转,很有帮助!!!牛逼! 里面主要是介绍这三个方法

public static byte[] rotateYUV420Degree90(byte[] data, int imageWidth, int imageHeight) { byte[] yuv = new byte[imageWidth * imageHeight * 3 / 2]; // Rotate the Y luma int i = 0; for (int x = 0; x yuv[i] = data[y * imageWidth + x]; i++; } } // Rotate the U and V color components i = imageWidth * imageHeight * 3 / 2 - 1; for (int x = imageWidth - 1; x > 0; x = x - 2) { for (int y = 0; y byte[] yuv = new byte[imageWidth * imageHeight * 3 / 2]; int i = 0; int count = 0; for (i = imageWidth * imageHeight - 1; i >= 0; i--) { yuv[count] = data[i]; count++; } i = imageWidth * imageHeight * 3 / 2 - 1; for (i = imageWidth * imageHeight * 3 / 2 - 1; i >= imageWidth * imageHeight; i -= 2) { yuv[count++] = data[i - 1]; yuv[count++] = data[i]; } return yuv; } public static byte[] rotateYUV420Degree270(byte[] data, int imageWidth, int imageHeight) { byte[] yuv = new byte[imageWidth * imageHeight * 3 / 2]; int nWidth = 0, nHeight = 0; int wh = 0; int uvHeight = 0; if (imageWidth != nWidth || imageHeight != nHeight) { nWidth = imageWidth; nHeight = imageHeight; wh = imageWidth * imageHeight; uvHeight = imageHeight >> 1;// uvHeight = height / 2 } // ??Y int k = 0; for (int i = 0; i yuv[k] = data[nPos + i]; k++; nPos += imageWidth; } } for (int i = 0; i yuv[k] = data[nPos + i]; yuv[k + 1] = data[nPos + i + 1]; k += 2; nPos += imageWidth; } } return rotateYUV420Degree180(yuv, imageWidth, imageHeight); }

以及下面这个很多人分享的图片旋转90度 在这里插入图片描述 我全都试了一遍,全都出现花屏四重影的情况,评论里都说好用,我想不能够啊,搞了一天差点顶不住,最后终于在论坛找到一个大佬的评论,瞬间豁然开朗 在这里插入图片描述 对,就是这么简单。你在使用旋转后的yuv数据传入宽高的时候要对调一下 比如我这个 在这里插入图片描述 改成 在这里插入图片描述 完美解决。下班



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有