关于wince 下LCD 控制器设置成RGB888 24bit 的相关问题

       在论坛找了一个topic ,自己也来分析一下。

http://bbs.csdn.net/topics/350122995?page=1#post-392888121

——

100分:开帖讨论WINCE下24位色显示瓶颈




引用 39 楼 JNU_kinke 的回复:
你要在驱动中和初始化LCD为32bit颜色深度,然后在显示24bit图片时就不会做lz所说的转化了。

不错不错,这几天试试就知道了。嘿嘿。
我要做S5pv210 24 bit 。
楼主上面代码也有线索了。

C/C++ code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
源码GPE EmulatedBlt_Internal()函数中可以找到):
    while ( height-- )
    for ( x=0; x<width; x++ )
     {
         src.Value = ( *src.Ptr ) + ( *(src.Ptr+1) << 8 ) + ( *(src.Ptr+2) << 16 );
         src.Ptr += src.BytesPerAccess;
         if ( pParms->pConvert )
         {
             src.Value= Parms->pColorConverter->*(pParms->pConvert))( src.Value );
        
         if ( quickWrite )
         {
             switch (dst.Bpp)             {
                 case  8:
                     *(unsigned  char  *)dst.Ptr = (unsigned  char )src.Value;
                     break ;
                 case  16:
                      *(unsigned  short  *)dst.Ptr = (unsigned  short )src.Value;                        break ;
                 case  32:
                      *(unsigned  long  *)dst.Ptr = (unsigned  long )src.Value;
                      break ;
                 case  24:
                      *dst.Ptr = (unsigned  char )(src.Value);
                      *(dst.Ptr+1) = (unsigned  char )(src.Value>>8);
                      *(dst.Ptr+2) = (unsigned  char )(src.Value>>16);
            }
            dst.Ptr += dst.BytesPerAccess;
        }
}


还有下面两个人的总结也非常有用

在EmulatedBlt_Internal()函数中加个Sleep(1000)的话,挺有意思,可以很清楚得看出WIN是如何显示界面的,包括像关闭的那个"X",是一个点一个点出来的),视频就不清楚了。



    解决显示慢的问题,保证图片颜色深度和屏实际的一致,否则系统会做转换,这肯定是慢的,我们6410的CPU都是一样。
   解决显示时间不一致的问题,双缓冲,用GDI来做就是,先把所有内容绘制到内存DC,在一次性从内存DC拷贝到屏幕DC,这样的效果就是同时显示出来的。

   本人就是遵循这2点,所以我做的每个界面,显示速度很快,基本上是一瞬间就出来,而且是同时显示,不会局部不一致,闪烁什么的

C/C++ code
1
2
3
case  32:
   *(unsigned  long  *)dst.Ptr = (unsigned  long )src.Value;
把24 bit 的当做32 bit 就可以一次传输过去。嘿嘿,好办法!

——我的个人看法

关于wince RGB888 24 bit 为什么没什么人搞?
因为wince很多屏幕并不大的,大部分屏幕都是RGB565 的16 bit ,所以BSP都是默认的RGB565 16 bit
RGB888 24 bit 是可以搞的,ARM的 CPU也支持24 bit
但是为什么32 bit 没人搞?
因为ARM 没有出支持32bit 的LCD控制器。
所以没必要啊,估计以后ARM强大了会有。
现在很多手机都是RGB888  24 bit ,效果也相当的好了。
至于如果是VGA的,这种情况,用RGB888 24 bit 已经足够了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值