RGB888转RGB565 C语言代码

之前做过一个项目,需要把视频格式RGB888转换成RGB565的,算法有很多

下面这个是自己优化过的一些

static int rgb888_to_rgb565(void * psrc, int w, int h, void * pdst)
{
    unsigned char * psrc_temp;
    unsigned short * pdst_temp;

    u32 i,j;//这里init,有问题

    if (!psrc || !pdst || w <= 0 || h <= 0) {
        DISPERR("rgb888_to_rgb565 : parameter error\n");
        return -1;
    }

    psrc_temp = (unsigned char *)psrc;
    pdst_temp = (unsigned short *)pdst;
    for (i=0; i<h; i++) {
        for (j=0; j<w; j++) {
            //888 r|g|b -> 565 b|g|r
            *pdst_temp =(((psrc_temp[2] >> 3) & 0x1F) << 11)//b
                        |(((psrc_temp[1] >> 2) & 0x3F) << 5)//g
                        |(((psrc_temp[0] >> 3) & 0x1F) << 0);//r

            psrc_temp += 3;
            pdst_temp ++;
        }
       // psrc_temp +=(3*16); //抛弃多余的48个字节
    }

    return 0;
}

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是将RGB565换为RGB888的C语言实现: ```c void RGB565_to_RGB888(uint16_t color565, uint8_t *r, uint8_t *g, uint8_t *b) { // 从RGB565中提取红色分量 uint8_t red = (color565 >> 11) & 0x1F; // 从RGB565中提取绿色分量 uint8_t green = (color565 >> 5) & 0x3F; // 从RGB565中提取蓝色分量 uint8_t blue = color565 & 0x1F; // 将红色分量从5位扩展到8位 *r = (red * 527 + 23) >> 6; // 将绿色分量从6位扩展到8位 *g = (green * 259 + 33) >> 6; // 将蓝色分量从5位扩展到8位 *b = (blue * 527 + 23) >> 6; } ``` 在该函数中,输入参数`color565`为一个16位的RGB565颜色值。输出参数`r`、`g`和`b`为分别代表RGB888颜色中的红色、绿色和蓝色分量的指针。 首先,我们从输入的RGB565颜色值中分别提取红色、绿色和蓝色分量。由于在RGB565中,红色分量占5位,绿色分量占6位,蓝色分量占5位,我们需要对它们进行位运算和掩码操作以提取它们的值。 接下来,我们将5位红色分量从RGB565扩展到8位RGB888。这里我们使用了一个矩阵乘法的优化算法,其基本思想是将5位的颜色值扩展到8位时,将其乘以一个系数,再向右移位。这个系数的值是`(2^8-1)/(2^5-1)=527/31≈17`。在计算时,我们使用了一个带有舍入偏移量的整数除法运算,以保证结果的正确性。绿色分量同样进行了这样的操作。 最后,我们将5位蓝色分量从RGB565扩展到8位RGB888。这里我们使用了与红色分量相同的矩阵乘法算法。 通过这个函数,我们可以将RGB565颜色值换为RGB888颜色值,并以指针的形式返回其RGB分量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值