天嵌 ARM开发社区

 找回密码
 注册
查看: 5560|回复: 5

请问有没有提供rgb565到rgb888的转换方法吗?

[复制链接]
change-live 发表于 2012-1-31 11:28:54 | 显示全部楼层 |阅读模式
谢谢!  版主帮个忙哈!!!
TQ-lkp 发表于 2012-1-31 16:28:29 | 显示全部楼层
你看下我们摄相头的测试程序中应该有
 楼主| change-live 发表于 2012-2-1 10:43:02 | 显示全部楼层
TQ-lkp 发表于 2012-1-31 16:28
你看下我们摄相头的测试程序中应该有

没有的吧 从驱动里read出来的数据就是rgb565格式的  你们定义的char preview_buf[240*320*2];就是16位吧,我想把565转成888 再放到opencv中去处理 但是没有什么相关知识 百度google也搜不出来 版主如果可以的话能帮个忙提供点思路或者资料吗?


static void v4l2_show_on_fb(int fd, char *fbmem, int frames)

{

        int i;

        int ret;

        char preview_buf[240*320*2];

       

        while(1) {

                        if ((ret = read (fd, &preview_buf, 240*320*2)) < 0) {

                                perror("read");

                                return;

                        }

                                //for 320*240,640*480,800*480

                        {

                        int y;

                        for (y = 0; y < 240; y++)

                                memcpy(fbmem + x_lcd_size*2*y, preview_buf + 320*2*y, 320*2);

                        }

       

                        fflush(stdout);

        }

       

        printf("\n");

}
 楼主| change-live 发表于 2012-2-2 17:44:47 | 显示全部楼层
唉  有网友可以帮下吗 ?我写了一个用QT实时显示摄像头采集图像的程序,可以保存图片,我看有不少网友都需要类似程序的源码,有网友帮我的话我可以分享源码 大家共同探讨。
亚瑟王 发表于 2012-2-6 11:27:42 | 显示全部楼层
亲,下面的方法应该可以帮你。
RGB565是16位的,占据了2个字节,RGB888是24位的占据了3个字节,而一般的系统都是32位的,也就是说,RGB888的高位或者低位的1个字节为空(具体是高还是低根据实际情况决定)。
如果是RGB888到RGB565,就是把R(红色)的8位保留高5位,G(绿色)的8位保留高6位,B(蓝色)的8为保留高5位,然后分别放到16位的15到11位,10到5位,4到0位。
RGB565到RGB888就是上面说的反向操作。
至于可能丢颜色的情况,可以考虑加入算法把8位的低3位人工填值,以补充颜色。
like12 发表于 2012-2-7 14:47:27 | 显示全部楼层
RGB888 格式是这样的:
*(fbp + location) = 255;  /* 蓝色的色深 */
*(fbp + location + 1) = 0; /* 绿色的色深*/
*(fbp + location + 2) = 0; /* 红色的色深*/
*(fbp + location + 3) = 0;  /* 是否透明*/
附件中是国嵌LCD应用程序的完整程序

我使用的是RGB565 我的程序中关键部分是这样的:
/*
* 用指定颜色清屏
*/
int LCD_Clear_Screen(char *fbp,char red,char green,char blue)
{
        int x;
        int y;
        char rgb0;
        char rgb1;
        long location = 0;
       
        rgb1 = (red << 3) | ((green & 0x38) >> 3);
        rgb0 = ((green & 0x7) << 5) | blue;

        /*(0,0)点在屏幕左上角*/
        for(y=0;y<240;y++)
        {
                for(x=0;x<320;x++)
                {
                        location = x * 2  +  y * (320 * 2);
                        *(fbp + location + 1) = rgb1;        //0000 0红 000 绿
                        *(fbp + location) = rgb0;                  //000绿 0 0000蓝
                }
        }
               
        return 0;
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-9-28 07:16 , Processed in 1.022500 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表