UGL之图片显示

2021-10-08 10:47:14 浏览数 (2)

欢迎关注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好多年!

钻研技术 其乐无穷!

0 人点赞