YUV422 to RGB565 Convert
来源:互联网 发布:轻轻家教 知乎 编辑:程序博客网 时间:2024/06/15 23:40
YUV是视频系统中常用的颜色空间,而显示通常是按照RGB格式进行输出显示的,要使YUV数据格式能够在显示屏上显示,需要将YUV格式转换为RGB格式,下面给出了YUV422到RGB565颜色空间转换的简单描述和程序实现。
1. 转换公式
YUV转换为RGB的公式如下:
R = Y + 1.402*(V-128);
G = Y - 0.34414*(U-128) - 0.71414*(V-128);
B = Y + 1.772*(U-128);
为了便于在计算机系统中进行处理,我们对公式进行一下简化:
R = Y + 1.402*(V-128) = y + v + 0.402*v = y + v + ((103 * v) >> 8);
G = Y - 0.34414*(U-128) - 0.71414*(V-128) = y - ((u * 88) >> 8) - ((v * 183) >> 8);
B = Y + 1.772*(U-128) = y + u + (u * 198) >> 8;
即:
R = y + v + ((103 * v) >> 8);
G = y - ((u * 88) >> 8) - ((v * 183) >> 8);
B = y + u + (u * 198) >> 8;
2. 程序实现
根据上面公式可以换算得到R、G、B三个分量数值,得到的数值需要经过范围转换以免越界导致色彩失真。 程序实现如下:
#define RANGE_LIMIT(x) (x > 255 ? 255 : (x < 0 ? 0 : x))void YUV422ToRGB565(const void* inbuf, void* outbuf, int width, int height){int rows, cols;int y, u, v, r, g, b;unsigned char *yuv_buf;unsigned short *rgb_buf;int y_pos,u_pos,v_pos;yuv_buf = (unsigned char *)inbuf;rgb_buf = (unsigned short *)outbuf;y_pos = 0;u_pos = 1;v_pos = 3;for (rows = 0; rows < height; rows++) {for (cols = 0; cols < width; cols++) {y = yuv_buf[y_pos];u = yuv_buf[u_pos] - 128;v = yuv_buf[v_pos] - 128;// R = Y + 1.402*(V-128)// G = Y - 0.34414*(U-128)// B = Y + 1.772*(U-128)r = RANGE_LIMIT(y + v + ((v * 103) >> 8));g = RANGE_LIMIT(y - ((u * 88) >> 8) - ((v * 183) >> 8));b = RANGE_LIMIT(y + u + ((u * 198) >> 8));*rgb_buf++ = (((r & 0xf8) << 8) | ((g & 0xfc) << 3) | ((b & 0xf8) >> 3));y_pos += 2;if (cols & 0x01) {u_pos += 4;v_pos += 4;}}}}
以上是YUV422(YUYV)转为RGB565的实现,对于其他格式的YUV格式,如YUV420, YUV422P等格式的转换,其实现都类似,主要的区别在于y, u, v分量的提取上,将程序做简单的修改就能够实现对应格式的YUV数据转换为RGB565数据格式。
- YUV422 to RGB565 Convert
- YUV422 to RGB565
- bitmap convert to RGB565 display
- bitmap convert to RGB565 display
- YUV420P和YUV422转RGB565
- YUV422转RGB565源码及详解
- YUV420P和YUV422转RGB565(…
- convert between RGB565 and RGB888
- YUV422 to RGB 转换
- RGB565 to RGB24
- RGB565 to RGB24
- RGB565 to gray
- YUV422 to YUV420sp color invert
- RGB565 to RGB24, RGB555 & RGB24
- RGB565 to RGB24, RGB555 & RGB24
- RGB565 to RGB24, RGB555 & RGB2
- ffmpeg 命令 rgb565 to YUV420p
- YUV422 to JPEG ---libjpeg 参考网页
- 获取spring容器中bean的方法
- Spring源码阅读之IoC容器初始化2 -- BeanDefinition载入与解析
- git使用方法
- ABAP开发之FI常用表
- mysql备份表
- YUV422 to RGB565 Convert
- SCA组件
- Java 获取固定格式的日期工具类 DateUtil
- C/C++ 笔记
- [C++]关于指针作为函数参数传递
- Hibernate.initialize(Obj)用法
- Hibernate的基本映射数据类型--(2)
- SQLite 入门教程(四)增删改查,有讲究
- PHP autoload与include性能比较