|
楼主 |
发表于 2017-1-9 16:20:06
|
显示全部楼层
15.3 存储设备基本函数及其应用
存储设备相关的API函数也非常多,这里我们选择几个常用的函数进行说明。
15.3.1 存储设备创建函数
存储设备的创建主要有以下三个函数:
1、GUI_MEMDEV_HandleGUI_MEMDEV_Create(int x0, int y0, int XSize, int YSize)
在位置x0,y0创建长为Xsize,宽为Ysize的存储设备,即一块显示区。此函数会创建与显示器颜色格式兼容的存储设备(比如,STM32F429支持8种颜色格式设置,存储设备的创建就与这些颜色格式兼容)。
2、GUI_MEMDEV_HandleGUI_MEMDEV_CreateEx(int x0, int y0,int XSize, int Ysize,int Flags))
此函数与上面的函数功能一样,只是多了一个参数flag,此参数有两种数值可以取:
(1)GUI_MEMDEV_HASTRANS
实际应用中推荐使用这个标志,表示使用透明性标记创建存储设备,该标记确保正确绘制背景。
使用此参数时,等效于函数GUI_MEMDEV_Create。
(2)GUI_MEMDEV_NOTRANS
创建存储设备,无透明性。优势是速度较快,使用此标记可加速存储设备约 30% - 50%,且可将存储设备用于非矩形区域。缺点是用户必须确保正确绘制背景。
3、GUI_MEMDEV_HandleGUI_MEMDEV_CreateFixed(int x0, int y0,
Int xSize, int ySize, intFlags,
const tLCDDEV_APIList *pMemDevAPI,
constLCD_API_COLOR_CONV *pColorConvAPI);
此函数用于创建指定颜色格式的存储设备,这个函数涉及参数较多,我们这里不再进行说明,具体参数看emWin官方手册的API函数说明即可,实际调用是比较容易的。
下面是在模拟器上实际运行的例子(显示的图标使用的是第12章12.2小节里面的两个流位图),可以在模拟器上面运行的完整例子代码在V6-514_STemWin实验_存储设备之基础函数(模拟器)里面。
- #include "GUI.h"
- #include "stdio.h"
-
- #ifndef GUI_CONST_STORAGE
- #define GUI_CONST_STORAGE const
- #endif
-
- extern GUI_CONST_STORAGE GUI_BITMAP bmpic;
-
- static GUI_CONST_STORAGE unsigned short _acpic[] = {
- 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
- 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
- 0xFFFF, 0xFFFF, 0xFFFF,
- 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDE, 0xFFBE, 0xFFBE, 0xFFBE,
- 0xFFBE, 0xFFBE, 0xFFBE, 0xFFDE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
- 0xFFFF, 0xFFFF, 0xFFFF,
- 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFBD, 0xF75B, 0xF6F9, 0xF697, 0xEE34, 0xEE13, 0xEDD1, 0xEDD1, 0xEDD1,
- 0xEDD1, 0xEDD1, 0xEDD1, 0xEE13, 0xEE55, 0xF6B7, 0xF71A, 0xF75C, 0xFFBE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
- /* 后面的数据未列出 */
-
- };
-
- GUI_CONST_STORAGE GUI_BITMAP bmpic = {
- 64, // xSize
- 64, // ySize
- 128, // BytesPerLine
- 16, // BitsPerPixel
- (unsigned char *)_acpic, // Pointer to picture data
- NULL, // Pointer to palette
- GUI_DRAW_BMP565
- };
-
- static GUI_CONST_STORAGE unsigned long _acpic1[] = {
- 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000,
- 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000,
- 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000,
- /* 后面的数据未列出 */
- };
-
- GUI_CONST_STORAGE GUI_BITMAP bmpic1 = {
- 64, // xSize
- 64, // ySize
- 256, // BytesPerLine
- 32, // BitsPerPixel
- (unsigned char *)_acpic1, // Pointer to picture data
- NULL, // Pointer to palette
- GUI_DRAW_BMP8888
- }
-
- /*********************************************************************
- *
- * MainTask
- */
- void MainTask(void) {
- GUI_MEMDEV_Handle hMem0;
- GUI_MEMDEV_Handle hMem1;
- GUI_MEMDEV_Handle hMem2;
- GUI_MEMDEV_Handle hMem3;
-
- /* emWin初始化 */
- GUI_Init();
-
- /* 设置字体 */
- GUI_SetFont(&GUI_Font16B_ASCII);
-
- //////////////////////////方式一/////////////////////////////////////
- /* 创建内存设备,并将RGB565格式的位图绘制到内存设备上 */
- hMem0 = GUI_MEMDEV_CreateEx(0, 0, 64, 64, GUI_MEMDEV_HASTRANS);
- GUI_MEMDEV_Select(hMem0);
- GUI_DrawBitmap(&bmpic, 0, 0);
- GUI_MEMDEV_Select(0);
-
- /* 显示RGB565格式的位图 */
- GUI_DispStringAt("This is RGB565 bitmap & GUI_MEMDEV_CreateEx", 100, 50);
- GUI_MEMDEV_WriteAt(hMem0, 20, 20);
-
-
- ////////////////////////////方式二///////////////////////////////////
- /* 创建内存设备,并将RGB565格式的位图绘制到内存设备上 */
- hMem1 = GUI_MEMDEV_CreateFixed(0, 0, 64, 64, GUI_MEMDEV_HASTRANS,
- GUI_MEMDEV_APILIST_16,
- GUI_COLOR_CONV_565);
- GUI_MEMDEV_Select(hMem1);
- GUI_DrawBitmap(&bmpic, 0, 0);
- GUI_MEMDEV_Select(0);
-
- /* 显示RGB565格式的位图 */
- GUI_DispStringAt("This is RGB565 bitmap & GUI_MEMDEV_CreateFixed", 100, 150);
- GUI_MEMDEV_WriteAt(hMem1, 20, 120);
-
- //////////////////////////////方式三/////////////////////////////////
- /* 创建内存设备,并将ARGB8888格式的位图绘制到内存设备上 */
- hMem2 = GUI_MEMDEV_CreateEx(0, 0, 64, 64, GUI_MEMDEV_HASTRANS);
- GUI_MEMDEV_Select(hMem2);
- GUI_DrawBitmap(&bmpic1, 0, 0);
- GUI_MEMDEV_Select(0);
-
- /* 显示ARGB8888格式的位图 */
- GUI_DispStringAt("This is ARGB8888 bitmap & GUI_MEMDEV_CreateEx", 100, 250);
- GUI_MEMDEV_WriteAt(hMem2, 20, 220);
-
- ////////////////////////////////方式四///////////////////////////////
- /* 创建内存设备,并将ARGB8888格式的位图绘制到内存设备上 */
- hMem3 = GUI_MEMDEV_CreateFixed(0, 0, 64, 64, GUI_MEMDEV_HASTRANS,
- GUI_MEMDEV_APILIST_32,
- GUI_COLOR_CONV_8888);
- GUI_MEMDEV_Select(hMem3);
- GUI_DrawBitmap(&bmpic1, 0, 0);
- GUI_MEMDEV_Select(0);
-
- /* 显示ARGB8888格式的位图 */
- GUI_DispStringAt("This is ARGB8888 bitmap & GUI_MEMDEV_CreateFixed", 100, 350);
- GUI_MEMDEV_WriteAt(hMem3, 20, 320);
-
- while (1)
- {
- GUI_Delay(10);
- }
-
- }
- /*************************** End of file ****************************/
复制代码 实际显示效果如下,分辨率600*400:
15.3.2 存储设备的选择和显示函数
在15.3.1小节的例子中,我们用到了存储设备选择函数和显示函数:
1、voidGUI_MEASDEV_Select (GUI_MEASDEV_Handle hMem)
此函数用于选择要使用的存储设备,打算在哪个存储设备上面进行绘制操作,参数就添加哪个存储设备的句柄,。如果参数填为0,将激活LCD,即绘制操作是在LCD上面进行的,而不是在存储设备上面进行的。
2、voidGUI_MEMDEV_WriteAt(GUI_MEMDEV_Handle hMem, int x, int y);
此函数用于将存储设备的内容绘制到LCD显示屏上。
15.3.3 存储设备的其它函数
存储设备的还有很多其它的函数,我们这里暂时不做讲解了,15.3.1和15.3.2小节中的函数是实际项目中用到最多的,其余的函数在emWin的官方手册中大部分都有举例说明,可以在模拟器上面运行下,看看实际的效果。另外在我们论坛的这个帖子中也有其它部分函数说明,有兴趣可以看下:http://www.armbbs.cn/forum.php?mod=viewthread&tid=1892 。 |
|