睡觉前问一个奇怪的wince 显示问题,明天晚上回来坐等各位精彩分析
问题是:为什么我的S5pv210 wince6.0 系统用32 bit 通过 VGA 输出的时候,CreateCompatibleBitmap和CreateDIBSection这两个的速度居然会比16 bit 通过 VGA输出的时候低那么多?按照道理这个wince 6.0 是32 bit 的系统,16 bit 或者24 bit 的数据都应该用32bit的方式来处理的,这个速度应该是一样的,或者差异不会太大。
现在测试得出的结果是
32 bit S5pv210 VGA输出
CreateCompatibleBitmap 4
CreateDIBSection 53
16 bit S5pv210 VGA输出
CreateCompatibleBitmap 3
CreateDIBSection 3
从上面可以看出CreateDIBSection 得出的结果差异非常大。
CreateCompatibleBitmap 没什么差别
这是为何?!
32 bit 的显示效果的确是比 16 bit的细腻一些,这时候运行一些 图片程序的时候可以看出来,但是这个效率咋变低呢。有什么办法解决?
[解决办法]
正常来说32bit比16bit差距并不大。不过“16 bit 或者24 bit 的数据都应该用32bit的方式来处理的”应该是错误的。16bit的数据并不是用32bit的方式来处理。
[解决办法]
我來告訴你為什麼,CreateDIBSection最後會呼叫blt
你可以看
C:\WINCE600\PLATFORM\SMDKV210\SRC\DRIVERS\DISPLAY\DISPLAY_DRV\blt.cpp
裡面的BltPrepare函式的最後面
#if USE_SECEMUL_LIBRARY
// To extract 2d_accel_lib.lib totally, using preprocess statement
if(m_G2DControlArgs.UseSWAccel)
{
SECEmulatedBltSelect16(pBltParms);
SECEmulatedBltSelect2416(pBltParms);
SECEmulatedBltSelect1624(pBltParms);
}
#endif
16bits使用了2D加速 , 而32bits沒有使用2D加速
所以VGA速度才會差那嚜多
[解决办法]
DDB,Device Dependent Bitmap,设备相关位图,因为相关,所以compatible,所以速度快,缺点也是因为相关,所以portability差。。
DIB,Device Independent Bitmap,设备无关位图,因为无关,所以不存在compatible,所以很慢。。好处显而易见。。
。。