1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| int rgb2YCbCr(unsigned int rgbColor, int* Y, int* Cb, int* Cr) { unsigned char r, g, b; int y, cb, cr; r = (rgbColor&0x00ff0000) >> 16; g = (rgbColor&0x0000ff00) >> 8; b = rgbColor & 0xff;
y = (int)( 0.299 * r + 0.587 * g + 0.114 * b); cb = (int)(-0.16874 * r - 0.33126 * g + 0.50000 * b + 128); if (cb < 0) cb = 0; cr = (int)( 0.50000 * r - 0.41869 * g - 0.08131 * b + 128); if (cr < 0) cr = 0;
*Y = y; *Cb = cb; *Cr = cr;
return 0; }
#define WIDTH 720 #define HEGHT 480
static unsigned char g_buf[WIDTH * HEGHT * 2] = {0x80};
/// 填充YUV数据,格式:UYVY static void init_my_buf(int width, int height) { unsigned char *src = g_buf; int i, j;
unsigned int rainbow_rgb[] = { 0xFF0000, 0xFF6100, 0xFFFF00, 0x00FF00, 0x00FFFF, 0x0000FF, 0xA020F0, 0x000000, 0xFFFFFF, 0xF4A460};
unsigned int rainbow_yuv[] = { 0x4c54ff, 0x8534d6, 0xe10094, 0x952b15, 0xb2ab00, 0x1dff6b, 0x5dd2af, 0xbb1654, 0x9c4bc5, 0xb450ad};
int slice = height / 10; for (i = 0; i < height; i++) // h { int index = i / slice; unsigned char y = (rainbow_yuv[index] & 0xff0000 ) >> 16; unsigned char u = (rainbow_yuv[index] & 0x00ff00) >> 8; unsigned char v = (rainbow_yuv[index] & 0x0000ff); for (j=0; j<width*2; j+=4) // w { src[i*width*2+j+0] = u; // U src[i*width*2+j+1] = y; // Y0 src[i*width*2+j+2] = v; // V src[i*width*2+j+3] = y; // Y1 } } }
|