在论坛找了一个topic ,自己也来分析一下。
http://bbs.youkuaiyun.com/topics/350122995?page=1#post-392888121
——
100分:开帖讨论WINCE下24位色显示瓶颈
不错不错,这几天试试就知道了。嘿嘿。
我要做S5pv210 24 bit 。
楼主上面代码也有线索了。
|
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点,所以我做的每个界面,显示速度很快,基本上是一瞬间就出来,而且是同时显示,不会局部不一致,闪烁什么的
|
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 已经足够了。
因为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 已经足够了。
本文深入分析了Wince环境下24位色显示的瓶颈问题,并提供了通过驱动优化和双缓冲机制提升显示效率的解决方案。讨论了如何在驱动中设置32位颜色深度以避免颜色转换带来的性能损耗,以及使用GPE EmulatedBlt_Internal()函数进行高效图像显示的技巧。此外,文章还提到了通过在该函数中加入延时操作以直观观察系统显示过程的方法,以及将图片绘制提前到内存DC再同步到屏幕DC的双缓冲优化策略。
1147

被折叠的 条评论
为什么被折叠?



