【STemWin教程入门篇】第9章 2-D图形库之绘制流位图

标签:
ucos-iiiucguiemwin2-d图形库流位图 |
分类: emWin |
第9章
2-D图形库之绘制流位图
本期主要讲解2-D图形库的绘制流位图,与C文件格式的位图相反,流位图可放在任何位置。位图流可用于创建位图。这些位图可按与C文件格式位图相同的方式使用。此外,emWin支持直接绘制基于调色板的位图流,而不必在可寻址区域(RAM或ROM)放置完整的图像。
9.
1
9.
2
9.
3
9.1
C流文件由与C文件相同的信息组成。它与C文件相反,数据流可位于任何地方,无需编译或与项目链接。C文件支持的所有输出格式对C流文件也可用。emWin支持从数据流创建位图并直接绘制数据流。
这里顺便说一下压缩位图,这个可看可不看,位图转换器和emWin支持在生成的源代码文件中对位图进行游程编码(RLE)压缩。如果位图包含许多水平序列的等着色像素,则RLE压缩方法最有效。高效压缩的位图将节省大量的空间。但是,不建议对摄影图像进行压缩,因为它们通常不具有相同像素的序列。也应注意,压缩图像的显示时间会稍微更长。如果要保存使用RLE压缩的位图,可在另存为C文件时,选择一种压缩输出格式:“带调色板的C,压缩”或 “不带调色板的C,压缩”。显示压缩位图无需特殊功能;与显示不压缩位图的方法相同。
获得的压缩比将随所用位图的不同而不同。图像水平均匀性越好,压缩比越高。每个像素的位数越高,产生压缩比也越高。下面我们以下面的图片为例子生成C流文件。
下面我们以下面的图片为例子生成C流文件。
l
l
l
l
l
9.2
下面是流位图当前支持的格式:
GUI_CreateBitmapFromStream()这个函数支持任意格式的流位图创建,可以直接的创建咱们上面生成的流位图,如果知道流位图的格式,那么可以直接的调用特定的函数,当前支持的函数如下:
这个东西该怎么的理解呢,这里举一个例子,咱们上面生成的那个C流文件是转换成了565格式,这里我们就可以使用函数GUI_CreateBitmapFromStream(),这个函数不管你转换成什么格式了,都可以创建的,还有一个就是GUI_CreateBitmapFromStream56
现在如何实现刚才那个C流文件的显示呢,我这里用三种方法显示咱们刚才生成的C流文件。
l
动态内存,方法如下:
hMem = GUI_ALLOC_AllocZero(1024*512);
l
RAM中数据的加载有三种方法,分别如下:
方法一:直接调用函数
方法二:GUI_CreateBitmapFromStream(&Bitmap, &Palette, _acBuffer2);
GUI_DrawBitmap(&Bitmap, 0, 0);
方法三:GUI_CreateBitmapFromStream56
GUI_DrawBitmap(&Bitmap, 0, 0);
实际运行代码如下:
#include "includes.h"
#include "MainTask.h"
#define
Method3
static void _ShowStreamBitmap(const char * sFilename)
{
GUI_BITMAP Bitmap;
#if defined Method1
#elif
defined Method2
#elif
defined Method3
#endif
//
//
//
}
void MainTask(void)
{
}
显示效果如下:
9.3
流位图在一些应用中比较有用,比如要在按钮上面显示图片,我们不需要将其用位图转换器转换成相应的C文件,并下载到内部flash进行显示,我们可以将其放到外部SD,flash等存储器进行加载显示,这个实验尝试了一下在按钮上面显示,就是显示不出来,后面有时间再做尝试。