在开发相机相关程序时,由于人们习惯于看镜子,因此开发者们经常会遇到镜像显示预览数据的需求。各个手机厂家也了解这一点,因此一般手机打开相机切换到前置摄像头看到的画面都是镜像的。本文提供了一些常见YUV、RGB数据的水平镜像和垂直镜像方法。
一、按像素点将图像镜像
图像可按水平镜像和垂直镜像。
假设有以下一张图像:
Pixel1 Pixel2 Pixel3 Pixel4
Pixel5 Pixel6 Pixel7 Pixel8
在**水平镜像**后,新的镜像数据内容将会是: >Pixel4 Pixel3 Pixel2 Pixel1
Pixel8 Pixel7 Pixel6 Pixel5
也就是:
- 原始数据第 0 行第 0 列的像素点将会变成目标数据第 0 行第 width - 1 列的像素点
- 原始数据第 0 行第 1 列的像素点将会变成目标数据第 0 行第 width - 2 列的像素点
- …
- 原始数据第 0 行第 width - 1 列的像素点将会变成目标数据第 0 行第 0 列的像素点
- …
- 原始数据第 height - 2 行第 0 列的像素点将会变成目标数据第 height - 2 行第 width - 1 列的像素点
- 原始数据第 height - 2 行第 1 列的像素点将会变成目标数据第 height - 2 行第 width - 2 列的像素点
- …
- 原始数据第 height - 2 行第 width - 1 列的像素点将会变成目标数据第 height - 2 行第 0 列的像素点
- …
- 原始数据第 height - 1 行第 0 列的像素点将会变成目标数据第 height - 1 行第 width - 1 列的像素点
- 原始数据第 height - 1 行第 1 列的像素点将会变成目标数据第 height - 1 行第 width - 2 列的像素点
- …
- 原始数据第 height - 1 行第 width - 1 列的像素点将会变成目标数据第 height - 1 行第 0 列的像素点
在垂直镜像后,新的镜像数据内容将会是:
Pixel5 Pixel6 Pixel7 Pixel8
Pixel1 Pixel2 Pixel3 Pixel4
也就是:
- 原始数据第 0 行第 0 列的像素点将会变成目标数据第 height - 1 行第 0 列的像素点