Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1372214
  • 博文数量: 198
  • 博客积分: 1629
  • 博客等级: 上尉
  • 技术积分: 2743
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-01 15:41
文章分类
文章存档

2023年(6)

2022年(20)

2021年(8)

2020年(3)

2018年(17)

2017年(3)

2016年(3)

2015年(9)

2014年(13)

2013年(17)

2012年(77)

2011年(22)

分类: 嵌入式

2016-11-09 09:49:21


点击(此处)折叠或打开

  1. inline int clip(int value, int min, int max) {
  2.     return (value > max ? max : value < min ? min : value);
  3. }

  4. /*
  5.  * YUV420 to RGB24
  6.  */
  7. static void YUV420toRGB24(char* yuvFrame, char* rgbFrame, int width, int height)
  8. {
  9.     int uIndex = width * height;
  10.     int vIndex = uIndex + ((width * height) >> 2);
  11.     int i, j;
  12.     int R,G,B,Y,U,V;

  13.     for (j = 0; j < height; j++)
  14.     {
  15.         for (i = 0; i < width; i++)
  16.         {
  17.             Y = yuvFrame[j * width + i];
  18.             U = yuvFrame[vIndex + (j / 2) * (width / 2) + i / 2];
  19.             V = yuvFrame[uIndex + (j / 2) * (width / 2) + i / 2];
  20.             // R
  21.             R = (int)(Y + 1.402*(V - 128));
  22.             rgbFrame[(j * width + i)*3] = clip(R, 0, 255);

  23.             //G
  24.             G = (int)(Y - 0.34414*(U-128) - 0.71414*(V-128));
  25.             rgbFrame[(j * width + i)*3+1] = clip(G, 0, 255);
  26.             // B
  27.             B = (int)(Y + 1.772*(U-128));
  28.             rgbFrame[(j * width + i)*3+2] = clip(B, 0, 255);

  29.         }
  30.     }
  31. }
UV420 planar数据, 以720×488大小图象YUV420 planar为例,
其存储格式是: 共大小为(720×480×3>>1)字节,
分为三个部分:Y,U和V
Y分量:    (720×480)个字节  
U(Cb)分量:(720×480>>2)个字节
V(Cr)分量:(720×480>>2)个字节
三个部分内部均是行优先存储,三个部分之间是Y,U,V 顺序存储。
即YUV数据的0--720×480字节是Y分量值,         
720×480--720×480×5/4字节是U分量    
720×480×5/4 --720×480×3/2字节是V分量。
阅读(1391) | 评论(0) | 转发(0) |
0

上一篇:Tslib移植

下一篇:QT支持USB触摸屏热插拔

给主人留下些什么吧!~~