YUV 图像左右旋转处理 java实现
android 设备调用后置摄像后,直出图像保存一般存在旋转90度,所以我们需要进行一次旋转,下面是旋转的说明。
以图像编码为 NV21 为例,直出图像为逆时针旋转90度,故需顺时针旋转90度将图像放正。
示例图片逆时针旋转了90度:
正确方向的图片:
NV21 编码为 YYYY VUVU,定义直出的图片宽为 width(200),高为 height(400),YUV 大小为 width*height*3/2
。
对于 Y 分量来说,大小和图片像素对应,所以Y分量是一个宽高对换过程,而 VU 总共占图片大小的 1/2 且成对出现,因此旋转过程需要把两个作为一个整体旋转,计算是宽高也需选择其中一个进行减半。所以分两部分处理,一部分是Y,另一部分是VU。
1. Y 旋转部分:
Y 旋转比较简单,也就是原图像从上往下遍历,第一行为新图像的右边第一列
代码如下:
public static void main(String[] args) {
int width = 10;
int height = 6;
int size = width * height;
int[] src = new int[size];
int[] dest = new int[size];
String format = "%2d";
for (int i = 0; i < size; i++) {
src[i] = i + 1;
}
//核心交换
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
dest[height * (j + 1) - 1 - i] = src[i * height + j];
}
}
//=======输出src===========================
System.out.println("src:");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
sb