6410 QT2 24bpp 解决只有3/4屏幕的 BUG

因为项目界面用到渐变色,大多数6410开发板默认都是RGB565,所以图片显示出现色斑,极其难看,

硬件如果不支持RGB888的话,只能改程序或图片,取消渐变色,尽可能用纯色代替,一般有经验的美工都能实现。

色斑效果:


16BPP                                                                                                                                        

   6410 QT2 24bpp 解决只有3/4屏幕的 BUG_第1张图片        

24BPP

     6410 QT2 24bpp 解决只有3/4屏幕的 BUG_第2张图片


所以将内核改成24bpp后,QT界面不正常了,只有3/4输出,最右边 1/4白屏,

原因以下这个贴解释的很清楚(QT 24bpp是按3个字节算RGB,linux LCD控制器按4个字节):

http://www.arm9home.net/simple/index.php?t14028.html


还有注意有些开发板的屏是没有接RGB888的,只支持RGB565,有些脚被NC或直接拉低了,这样你怎么都调不出RGB888来的:

http://ucos.usr.cc/thread-1603-1-1.html


现在思路很清楚了,有几个解决办法:

第1种.在内核配置为24bpp RGB888(注意6410不支持ARGB8888 32bpp,设置了会黑屏):

6410 QT2 24bpp 解决只有3/4屏幕的 BUG_第3张图片

Qt 是通过ioctl /dev/fb0来获取framebuffer信息(qt2/kernel/qgfxlinuxfb_qws.cpp):

6410 QT2 24bpp 解决只有3/4屏幕的 BUG_第4张图片


修改linux内核 drivers/video/fbmem.c do_fb_ioctl函数:

加入

#if 1/*modify by lxj 2011.09.02 for qt support 24bpp*/
        if(info->var.bits_per_pixel==24){
            info->var.bits_per_pixel = 32;
        }
#endif

6410 QT2 24bpp 解决只有3/4屏幕的 BUG_第5张图片

以上我试过是可行的,简单实用;


第2种.非得让QT支持24bpp也可以,需要重新编译QT库,我用的是QT2的版本,首先,在编译QT的脚本里加入24bpp支持  -depths 16,24,32

echo yes | ./configure -qte '-embedded -no-xft -qconfig qpe -depths 16,24,32 -system-jpeg -qt-zlib -qt-libpng -gif -no-g++-exceptions -no-qvfb -xplatform linux-arm-g++ -tslib -thread' -qpe 'edition pda -displaysize 480x272 -fontfamilies "helvetica fixed micro smallsmooth smoothtimes unifont" -xplatform linux-arm-g++ -luuid' -qt2 '-no-opengl -no-xft' -dqt '-no-xft -thread' &&

修改qt2/kernel/qgfxlinuxfb_qws.cpp QLinuxFbScreen::connect 函数(大概139行)中:

加入

#if 1
    if(d==24){/*modify by lxj 2011.09.02, support 24bpp*/
        d = 32;
    }
#endif

6410 QT2 24bpp 解决只有3/4屏幕的 BUG_第6张图片


重新编译一次QT,将编译好的库更新到文件系统中,就可以了。我只更新了libqte.so.2库

保险起见,两种方法都可一起用上。


你可能感兴趣的:(linux,脚本,qt,linux内核)