• 12101阅读
  • 6回复

qt色彩不对的问题 [复制链接]

上一主题 下一主题
离线foreverlee
 
只看楼主 倒序阅读 楼主  发表于: 2009-07-07
在at91sam9261的板子上移植qt,运行qt带的例子,发现qt颜色不对,atmel LCD用的是BGR555,怎么才能转成RGB565呢,现在的qt版本是4.2.3,在网上看到说是4.4以上的版本就不用管这个转换了,只用在configure的时候加个选项就可以了,请问是这样吗?BGR转RGB该修改什么呢?
离线jklbupt
只看该作者 1楼 发表于: 2009-07-08
我记的原来linux4sam论坛上有个贴子是解决qt4 core 这个问题的.你先找找. 还有你的qt 版本是那个?qtopia-opensource 还是qt embeded?现在也在弄9261交流下.
离线kitten

只看该作者 2楼 发表于: 2009-07-08
顶起,现在正在为这个问题苦恼,qt的demo按键颜色也不正常,不过窗口背景指定一个不存在路径的图片,颜色就正常了
离线alayi
只看该作者 3楼 发表于: 2009-09-02
呵呵 我的是9263上面出现这个问题的

我把qt改了一下 qt库版本 是 qt-2.3.10  基本OK了 只是 阴影部分还有点点 问题 真正解决中.................
以下是修改的代码:

其中添加了一个编译参数  BGR_555
可以添加在 configure 中
config的时候添加  -bgr555 选项
   -R)
    shift
    R_FLAGS="$R_FLAGS -R$1"
    ;;
   -bgr555)
    shift
    QT_CXX="$QT_CXX -BGR_555"
    ;;
   *)
       echo $1: unknown argument
       HELP=yes;
       ERROR=yes
    ;;
   esac
   shift
done

src/kernel/qgfx_qws.h

44 #if !defined( QT_NO_IMAGE_16_BIT ) || !defined( QT_NO_QWS_DEPTH_16 )
45 # ifndef QT_QWS_DEPTH16_RGB
46     #if defined(BGR_555)
47         #define QT_QWS_DEPTH16_RGB 555
48     #else
49         #define QT_QWS_DEPTH16_RGB 565
50     #endif /* end BGR_555 */
51 # endif
52 static const int qt_rbits = (QT_QWS_DEPTH16_RGB/100);
53 static const int qt_gbits = (QT_QWS_DEPTH16_RGB/10%10);
54 static const int qt_bbits = (QT_QWS_DEPTH16_RGB%10);
55
56 #if defined(BGR_555)
57 static const int qt_neg_blue_shift = qt_bbits+qt_gbits-(8-qt_rbits);
58 static const int qt_green_shift = qt_bbits-(8-qt_gbits);
59 static const int qt_red_shift = 8-qt_bbits;
60
61 static const int qt_red_mask = (1<<qt_bbits)-1;
62 static const int qt_green_mask = (1<<(qt_gbits+qt_bbits))-(1<<qt_bbits);
63 static const int qt_blue_mask = (1<<(qt_rbits+qt_gbits+qt_bbits))-(1<<(qt_gbits+qt_bbits));
64 #else
65 static const int qt_red_shift = qt_bbits+qt_gbits-(8-qt_rbits);
66 static const int qt_green_shift = qt_bbits-(8-qt_gbits);
67 static const int qt_neg_blue_shift = 8-qt_bbits;
68
69 static const int qt_blue_mask = (1<<qt_bbits)-1;
70 static const int qt_green_mask = (1<<(qt_gbits+qt_bbits))-(1<<qt_bbits);
71 static const int qt_red_mask = (1<<(qt_rbits+qt_gbits+qt_bbits))-(1<<(qt_gbits+qt_bbits));
72 #endif
73
74 inline ushort qt_convRgbTo16( const int r, const int g, const int b )
75 {
76     //const int tr = r << qt_red_shift;
77     //const int tg = g << qt_green_shift;
78     //const int tb = b >> qt_neg_blue_shift;
79 #if defined(BGR_555)    
80     const int tr = r >> qt_red_shift;       /* 3 */
81     const int tg = g << qt_green_shift;     /* 2 */
82     const int tb = b << qt_neg_blue_shift;  /* 7 */
83     //return (tr & 0x1f) | (tg & 0x3E0) | (tb & 0x7C00);
84 #else
85     const int tr = r << qt_red_shift;       /* 8 */
86     const int tg = g << qt_green_shift;     /* 3 */
87     const int tb = b >> qt_neg_blue_shift;  /* 3 */
88     //return (tb & 0x1f) | (tg & 0x3E0) | (tr & 0x7C00);
89 #endif
90     /* the pix 16bit format of BGR555 is 0bbbbbgggggrrrrr
91      * the pix 16bit format of RGB565 is rrrrrggggggbbbbb */
92     //qDebug( "qt_red_shift:%d, qt_green_shift:%d, qt_neg_blue_shift:%d\n", qt_red_shift, qt_green_shift, qt_neg_blue_shift);
93     //qDebug( "qt_red_mask:%d, qt_green_mask:%d, qt_blue_mask:%d\n", qt_red_mask, qt_green_mask, qt_blue_mask);
94     return (tr & qt_red_mask) | (tg & qt_green_mask) | (tb & qt_blue_mask);
95 }
96
97 inline ushort qt_convRgbTo16( QRgb c )
98 {
99     //const int tr = qRed(c) << qt_red_shift;
100     //const int tg = qGreen(c) << qt_green_shift;
101     //const int tb = qBlue(c) >> qt_neg_blue_shift;
102 #if defined(BGR_555)    
103     const int tr = qRed(c) >> qt_red_shift;
104     const int tg = qGreen(c) << qt_green_shift;
105     const int tb = qBlue(c) << qt_neg_blue_shift;
106     //return (tr & 0x1f) | (tg & 0x3E0) | (tb & 0x7c00);
107 #else
108     const int tr = qRed(c) << qt_red_shift;
109     const int tg = qGreen(c) << qt_green_shift;
110     const int tb = qBlue(c) >> qt_neg_blue_shift;
111     //return (tb & 0x1f) | (tg & 0x3E0) | (tr & 0x7C00);
112 #endif
113     return (tr & qt_red_mask) | (tg & qt_green_mask) | (tb & qt_blue_mask);
114 }
离线alayi
只看该作者 4楼 发表于: 2009-09-02
不好意思上面写错了
shift
    QT_CXX="$QT_CXX -BGR_555"

在-BGR_555的B前加一个D --> QT_CXX="$QT_CXX -DBGR_555"
离线alayi
只看该作者 5楼 发表于: 2009-09-02
再给你补充点吧:
以下是我的一点总结,供参考,(仅供参考哦 哈哈 别太认真了,错了别怪我)
BGR555:
rgb red    >> 3
rgb green  << 2
rgb blue   << 7

red mask   0x1f
green mask 0x3e0
blue mask  0x7c00

pix format: 0bbbbbgggggrrrrr  (注意是16bit的其它的我不管)


RGB565:
rgb red    << 8
rgb green  << 3
rgb blue   >> 3

red mask   0x1f
green mask 0x3e0
blue mask  0x7c00

pix format: 0bbbbbgggggrrrrr
离线ruikflyer
只看该作者 6楼 发表于: 2010-07-22
我要移植的是这个qt-everywhere-opensource-src-4.6.2
应该怎么加什么选项呢?

也是按照楼上的这么做么?

其中添加了一个编译参数  BGR_555
可以添加在 configure 中
config的时候添加  -bgr555 选项

   -bgr555)
    shift
    QT_CXX="$QT_CXX -BGR_555"
    ;;

昨天按照这个,好像还是不正常。
快速回复
限100 字节
 
上一个 下一个