在线时间23 小时
UID2034138
ST金币0
蝴蝶豆0
注册时间2015-1-7
中级会员
- 最后登录
- 2020-7-30
|

楼主 |
发表于 2016-9-26 02:14:55
|
显示全部楼层
a0a.1 288b0c
最后提一下这个东西。有人会问为什么 不用这个函数LCD_SetDevFunc。其实说了也很纠结,因为读出.bmp在window的控件里面是不卡的,但是如果你调用GUI_BMP_Draw去显示bmp或者其他什么的类型的图片文件就会很卡,可能是因为调用存储机制?反正是为什么lib库你也看不到。我也没有进行深入的探究。但是可以确定的就是你可以通过我说的这几种方法快速的画图。
第一在没有stemwin的情况下。这种方式你可以放很多图片,总比官方的qspi的快。同时也省去你去一点一点去解析bmp文件的时间。一举两得。速度很快的。
第二在有stemwin的情况下你单纯的想绘制bmp。好处是把官方例程本该运行在qspiflash上的代码重新放回芯片内部(官方例程在图片多的时候就是这样做的),也摆脱了flash大小的问题。说实在的你要是飞想放qspiflash也行,用我的方法同样靠谱。程序还是在芯片里面靠谱我个人觉得。
第三使用stemwin的windows下的窗口控件image,好处同二。
其实st的例程把f4f7带加速器的程序更改已经在手册中写出来了,详情看英文版的中文版的没有5.28。就是下面那段程序。但是追求更快肯定没有什么错误。而且我已经在之前说了。我这样做的主要目的是把几百张图放进去。。。其实少的情况下你按照官方的例程走也是没有问题的。
从始至终的思路是没有问题的,首先不要解析,其次放进内存,之后显示。
/* Set custom functions for several operations */
LCD_SetDevFunc(i, LCD_DEVFUNC_COPYBUFFER, (void(*)(void))LCD_LL_CopyBuffer);
LCD_SetDevFunc(i, LCD_DEVFUNC_COPYRECT, (void(*)(void))LCD_LL_CopyRect);
/* Filling via DMA2D does only work with 16bpp or more */
LCD_SetDevFunc(i, LCD_DEVFUNC_FILLRECT, (void(*)(void))LCD_LL_FillRect);
LCD_SetDevFunc(i, LCD_DEVFUNC_DRAWBMP_8BPP, (void(*)(void))LCD_LL_DrawBitmap8bpp);
LCD_SetDevFunc(i, LCD_DEVFUNC_DRAWBMP_16BPP, (void(*)(void))LCD_LL_DrawBitmap16bpp);
LCD_SetDevFunc(i, LCD_DEVFUNC_DRAWBMP_32BPP, (void(*)(void))LCD_LL_DrawBitmap32bpp);
/* Set VRAM address */
LCD_SetVRAMAddrEx(i, (void *)(layer_prop.address));
GUICC_M4444I_SetCustColorConv(Color2IndexBulk_M4444IDMA2D,Index2ColorBulk_M4444IDMA2D);
GUICC_M888_SetCustColorConv(Color2IndexBulk_M888DMA2D,Index2ColorBulk_M888DMA2D);
GUICC_M8888I_SetCustColorConv(Color2IndexBulk_M8888IDMA2D,Index2ColorBulk_M8888IDMA2D);
GUI_SetFuncAlphaBlending(DMA2D_AlphaBlending);
GUI_SetFuncGetpPalConvTable(_LCD_GetpPalConvTable);
GUI_SetFuncMixColors(DMA2D_MixColors);
GUI_SetFuncMixColorsBulk(LCD_MixColorsBulk);
|
|