欢迎关注VxWorks567
WindML5.3里默认已经支持JPG和PNG的图片格式了
包含这两个option后,App里就可以直接打开相应的图片文件 - uglImageReadFile()
这个函数可以把输入的文件转换为DIB,然后就可以随意使用这个位图了。或者直接转换为DBD,更便于显示。闲言少续,上代码
代码语言:javascript复制
#include <ugl/ugl.h>
#include <ugl/image/uglImage.h>
void testUglImage(char *name, UINT32 x, UINT32 y)
{
UGL_REG_DATA *pRegData;
UGL_GC_ID gc;
UGL_DDB_ID myDdbId;
UGL_IMAGE *pImage;
if(NULL == name)
return;
uglDisplayOpen(NULL, NULL, NULL);
pRegData = uglRegistryFind(UGL_DISPLAY_TYPE, NULL, NULL, NULL);
gc = uglGcCreate((UGL_DEVICE_ID)pRegData->id);
pImage = uglImageReadFile(name, IMAGE_OBJECT_DDB, UGL_NULL,
(UGL_DEVICE_ID)pRegData->id, UGL_NULL);
if(UGL_NULL != pImage)
{
myDdbId = (UGL_DDB_ID)(pImage->pObject);
if(UGL_NULL != myDdbId)
{
uglBitmapBlt(gc, myDdbId,
0, 0, myDdbId->width-1, myDdbId->height-1,
UGL_DISPLAY_ID, x, y);
uglImageFree(pImage);
}
}
#if 0
/* 退出图形 */
uglGcDestroy(gc);
uglDisplayClose(NULL);
#endif
return;
}
这段代码的作用就是把文件转换为DBD,然后贴到屏幕上,看效果
有些低版本WindML,还不支持PNG,那可以把高版本的这个libpng移植过去,毕竟WindRiver用的就是开源的
如果还想支持其它格式,就得根据相应的文件格式,自己去封装一个解析函数了,例如最基本的bmp,就有32位真彩色、24位、256色、16色、黑白等多种模式
公众号VxWorks567封装了BMP的函数,支持各种颜色模式
还有一种比较特殊的图片格式:gif - 每个gif文件里,可以包含多个位图
把gif里所有位图都读取之后,按照一定的时间间隔来显示,视觉上就是动画了
既然是自己读取的位图,时间间隔也是自己说了算:那来个两倍速
我是泰山 专注VX好多年!
钻研技术 其乐无穷!