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);
}
转: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);
}
相关文章推荐
- YUV转RGB的相关函数
- 基础函数:YUV与RGB的转换
- yuv转rgb的函数
- yuv rgb 互转表和函数 ,从别的程序抠出来的。
- RGB, YUV及相关标准
- RGB, YUV及相关标准
- YUV 与 RGB相关知识及编程
- YUV 与RGB互转的函数
- 网络字节序和主机字节序及相关函数
- YUV色彩模型 & YUV与RGB的转换公式 & YUV420的存储格式
- ob_start相关函数学习
- [置顶] MFC中获取窗口句柄及相关函数
- 理解SetWindowOrg等相关函数
- SAS函数相关
- 视频音频流_RGB与YUV图像格式
- YUV与RGB相互转换的公式
- 交叉引用相关函数
- PHP扩展之XML操作(三)——XML解析器使用及相关函数
- ABAP 几个文件相关的函数
- YUV to RGB convertion by fragment shader