|
现在我们V6板子一直用的RGB565,刷色块是1亿2千万,而用ARGB8888的时候刷色块也是非常快的,可以达到8000万。
这里注意一点,这个不仅仅是DMA2D个功劳,你用的SDRAM性能也很重要,要用32位带宽的,因为DMA2D是把颜色值往
SDRAM显存里面刷的。
--------------------------------------------------------------------------------------------------
那么此时,问题来了,16位色刷图片的时候,刷800*480*2的图片仅需要15ms,而32位色的时候刷800*480*2,居然干到200ms左右
这个差距太大了,经过研究,应该是找到原因了,我采用下面这么方法刷图片
hMempic = GUI_MEMDEV_CreateEx(0, 0, 800, 480, GUI_MEMDEV_HASTRANS);
/* 将图片解码到内存设备中 */
GUI_MEMDEV_Select(hMempic);
GUI_DrawBitmap(&bm1, 0, 0); -------注意,由于emWin内部是32位的ABGR个颜色格式,这里会调用底层函数进行颜色转换,以适应当前显示屏的显示。
GUI_MEMDEV_Select(0);
显示的时候调用函数:
GUI_MEMDEV_WriteAt(hMempic,0,0);
----------------------------------------------------
16位色和32位色的关键就在这个显示函数上面了,使用16位色的时候,这个显示函数不会再调用底层函数进行颜色转换。
而使用32位色的时候,还继续调用底层颜色转换函数,将ABGR转换为ARGB,差距就在这里。 |
|