您的位置:首页 > 编程语言 > Java开发

YUV转RGB的相关函数

2012-08-29 18:24 477 查看
YUV RGB 转换的函数很有帮助的。

转:http://mintelong.javaeye.com/blog/460780

 

[b][java]
view plaincopy[/b]

1.  static void ccvt_420p_rgb565(int width, int height, const unsigned char *src, __u16 *dst)    
2.  {    
3.  int line, col, linewidth;    
4.  int y, u, v, yy, vr, ug, vg, ub;    
5.  int r, g, b;    
6.  const unsigned char *py, *pu, *pv;    
7.      
8.  linewidth = width >> 1;    
9.  py = src;    
10. pu = py + (width * height);    
11. pv = pu + (width * height) / 4;    
12.     
13. y = *py++;    
14. yy = y << 8;    
15. u = *pu - 128;    
16. ug =   88 * u;    
17. ub = 454 * u;    
18. v = *pv - 128;    
19. vg = 183 * v;    
20. vr = 359 * v;    
21.     
22. for (line = 0; line < height; line++) {    
23.    for (col = 0; col < width; col++) {    
24.     r = (yy +      vr) >> 8;    
25.     g = (yy - ug - vg) >> 8;    
26.     b = (yy + ub     ) >> 8;    
27.     
28.     if (r < 0)   r = 0;    
29.     if (r > 255) r = 255;    
30.     if (g < 0)   g = 0;    
31.     if (g > 255) g = 255;    
32.     if (b < 0)   b = 0;    
33.     if (b > 255) b = 255;    
34.    *dst++ = (((__u16)r>>3)<<11) | (((__u16)g>>2)<<5) | (((__u16)b>>3)<<0);    
35.       
36.     y = *py++;    
37.     yy = y << 8;    
38.     if (col & 1) {    
39.      pu++;    
40.      pv++;    
41.     
42.      u = *pu - 128;    
43.      ug =   88 * u;    
44.      ub = 454 * u;    
45.      v = *pv - 128;    
46.      vg = 183 * v;    
47.      vr = 359 * v;    
48.     }    
49.    } /* ..for col */    
50.    if ((line & 1) == 0) { // even line: rewind    
51.     pu -= linewidth;    
52.     pv -= linewidth;    
53.    }    
54. } /* ..for line */    
55. }    

 
YUV422 ---->>RGB565的

[b][java]
view plaincopy[/b]

#define YCbCrtoR(Y,Cb,Cr) (1000*Y + 1371*(Cr-128))/1000    
#define YCbCrtoG(Y,Cb,Cr) (1000*Y - 336*(Cb-128) - 698*(Cr-128))/1000    
#define YCbCrtoB(Y,Cb,Cr) (1000*Y + 1732*(Cb-128))/1000    
#define min(x1, x2)   (((x1)<(x2))?(x1):(x2))    
    
__u32 Conv_YCbCr_Rgb(__u8 y0, __u8 y1, __u8 cb0, __u8 cr0)    
{    
// bit order is    
// YCbCr = [Cr0 Y1 Cb0 Y0], RGB=[R1,G1,B1,R0,G0,B0].    
    
int r0, g0, b0, r1, g1, b1;    
__u16 rgb0, rgb1;    
__u32 rgb;    
    
#if 1 // 4 frames/s @192MHz, 12MHz ; 6 frames/s @450MHz, 12MHz    
r0 = YCbCrtoR(y0, cb0, cr0);    
g0 = YCbCrtoG(y0, cb0, cr0);    
b0 = YCbCrtoB(y0, cb0, cr0);    
r1 = YCbCrtoR(y1, cb0, cr0);    
g1 = YCbCrtoG(y1, cb0, cr0);    
b1 = YCbCrtoB(y1, cb0, cr0);    
#endif    
    
if (r0>255 ) r0 = 255;    
if (r0<0) r0 = 0;    
if (g0>255 ) g0 = 255;    
if (g0<0) g0 = 0;    
if (b0>255 ) b0 = 255;    
if (b0<0) b0 = 0;    
    
if (r1>255 ) r1 = 255;    
if (r1<0) r1 = 0;    
if (g1>255 ) g1 = 255;    
if (g1<0) g1 = 0;    
if (b1>255 ) b1 = 255;    
if (b1<0) b1 = 0;    
    
// 5:6:5 16bit format    
rgb0 = (((__u16)r0>>3)<<11) | (((__u16)g0>>2)<<5) | (((__u16)b0>>3)<<0); //RGB565.    
rgb1 = (((__u16)r1>>3)<<11) | (((__u16)g1>>2)<<5) | (((__u16)b1>>3)<<0); //RGB565.    
    
rgb = (rgb1<<16) | rgb0;    
    
return(rgb);    
}   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dst java