Chinaunix首页 | 论坛 | 博客
  • 博客访问: 48713
  • 博文数量: 26
  • 博客积分: 1175
  • 博客等级: 少尉
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-14 19:16
文章分类
文章存档

2011年(1)

2010年(25)

我的朋友

分类: LINUX

2010-04-29 19:24:04

各种RGB转换的函数。用于数据采集的转换的

unsigned short RGB888toRGB555(unsigned char red, unsigned char green, unsigned char blue)
{
#if 0
    unsigned short B = (blue >> 3 ) << 11;

    unsigned short G = (green >> 2) << 5;

    unsigned short R = (red >> 3) << 0;
#endif
    unsigned short  B = (blue >> 3) & 0x001F;

       unsigned short  G = ((green >> 2) << 5) & 0x07E0;

       unsigned short  R = ((red >> 3) << 11) & 0xF800;


    return (unsigned short) (B | G | R);

}

#define RGB565_MASK_RED        0xF800
#define RGB565_MASK_GREEN      0x07E0
#define RGB565_MASK_BLUE       0x001F

void rgb565_2_rgb24(char *g_rgbbuf, char *rgb565)
{
    int i;
    unsigned short *pRGB16 = (unsigned short *) rgb565;
    for (i = 0; i < 320 * 240; i++) {
        unsigned short RGB16 = *pRGB16;
        g_rgbbuf[i * 3 + 2] = (RGB16 & RGB565_MASK_RED) >> 11;
        g_rgbbuf[i * 3 + 1] = (RGB16 & RGB565_MASK_GREEN) >> 5;
        g_rgbbuf[i * 3 + 0] = (RGB16 & RGB565_MASK_BLUE);
        g_rgbbuf[i * 3 + 2] <<= 3;
        g_rgbbuf[i * 3 + 1] <<= 2;
        g_rgbbuf[i * 3 + 0] <<= 3;
        pRGB16++;
    }   

}

void RGB555toRGB888(unsigned char *rgb888, unsigned short *RGB555)
{

    int i, j;

    unsigned short *dot;
    for (i = 0; i < 320; i++)
        for (j = 0; j < 240; j++) {
            dot = RGB555 + i * 240 + j;

            *rgb888++ = (((*dot) & 0x01F) << 3);  //R

            *rgb888++ = (((*dot) & 0x03E0) >> 2); //G

            *rgb888++ = (((*dot) & 0x7C00) >> 7); //B

        }
}

阅读(688) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~