前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UGL之标准位图

UGL之标准位图

作者头像
Taishan3721
发布2020-09-28 10:48:28
8740
发布2020-09-28 10:48:28
举报
文章被收录于专栏:这里只有VxWorks

位图操作是WindML 2D图形库里一个非常重要的功能。要想绘制位图,需要先了解两个名词

  • DIB - Device Independent Bitmap
  • DDB - Device Dependent Bitmap

顾名思义,DIB主要是给人用的,DDB主要是给显卡用的。与之相关的函数主要有这几个:

代码语言:javascript
复制

typedef struct ugl_dib
    {
    UGL_SIZE          width;         /* width of bitmap image in pixels */
    UGL_SIZE          height;        /* height of bitmap image in pixels */
    UGL_SIZE          stride;        /* distance between adjacent scan lines */
    UGL_INT32         imageFormat;   /* format of the index in bitmap image */
    UGL_COLOR_FORMAT  colorFormat;   /* format of the image */
    UGL_SIZE          clutSize;      /* size of clut in number of elements */
    void             *pClut;         /* Pointer to CLUT */
    void             *pImage;        /* Pointer to image */
    UGL_UINT32        transColorKey; /* Reserved field */
    } UGL_DIB;
typedef struct ugl_bmap_header
    {
    UGL_UINT16 type;                /* type of bitmap */
    UGL_UINT16 width;               /* width of bitmap */
    UGL_UINT16 height;              /* height of bitmap */
    UGL_UINT16 maxWidth;            /* maximum width of bitmap */
    UGL_UINT16 maxHeight;           /* maximum height of bitmap */
    void      *extension;           /* device specific extensions */
    } UGL_BMAP_HEADER;
typedef UGL_BMAP_HEADER *UGL_BITMAP_ID;  
typedef UGL_BMAP_HEADER  UGL_DDB;
typedef UGL_DDB         *UGL_DDB_ID;

UGL_DDB_ID uglBitmapCreate 
    (
    UGL_DEVICE_ID          devId,
    UGL_DIB               *pDib,
    UGL_DIB_CREATE_MODE    createMode,
    UGL_UINT32             initValue,
    UGL_DEVICE_MEM_POOL_ID poolId
    );
UGL_STATUS uglBitmapDestroy 
    (
    UGL_DEVICE_ID devId,
    UGL_DDB_ID    ddbId
    );
UGL_STATUS uglBitmapBlt
    (
    UGL_GC_ID     gc,
    UGL_BITMAP_ID srcBitmapId,
    UGL_POS       srcLeft,
    UGL_POS       srcTop,
    UGL_POS       srcRight,
    UGL_POS       srcBottom,
    UGL_DDB_ID    dstBitmapId,
    UGL_POS       dstX,
    UGL_POS       dstY
    );
UGL_STATUS uglBitmapStretchBlt 
    (
    UGL_GC_ID     gc,
    UGL_BITMAP_ID srcBitmapId,
    UGL_POS       srcLeft,
    UGL_POS       srcTop,
    UGL_POS       srcRight,
    UGL_POS       srcBottom,
    UGL_DDB_ID    dstBitmapId,
    UGL_POS       dstLeft,
    UGL_POS       dstTop,
    UGL_POS       dstRight,
    UGL_POS       dstBottom
    );
UGL_STATUS uglBitmapWrite
    (
    UGL_DEVICE_ID devId,
    UGL_DIB      *pDib,
    UGL_POS       srcLeft,
    UGL_POS       srcTop,
    UGL_POS       srcRight,
    UGL_POS       srcBottom,
    UGL_DDB_ID    ddbId,
    UGL_POS       dstX,
    UGL_POS       dstY
    );
UGL_STATUS uglBitmapRead 
    (
    UGL_DEVICE_ID devId,
    UGL_DDB_ID    ddbId,
    UGL_POS       srcLeft,
    UGL_POS       srcTop,
    UGL_POS       srcRight,
    UGL_POS       srcBottom,
    UGL_DIB      *pDib,
    UGL_POS       dstX,
    UGL_POS       dstY
    );
UGL_STATUS uglBitmapInfoGet
    (
    UGL_DEVICE_ID    devId,
    UGL_DDB_ID       bitmapId,
    UGL_BITMAP_INFO *pBitmapInfo
    );
UGL_STATUS uglBitmapSizeGet
    (
    UGL_DDB_ID ddbId,
    UGL_SIZE  *pWidth,
    UGL_SIZE  *pHeight
    );
UGL_STATUS uglBitmapResize
    (
    UGL_DEVICE_ID devId,
    UGL_DDB_ID    bitmapId,
    int           width,
    int           height
    );

首先,需要先创建一个DIB对象。而将这个DIB绘制到屏幕,大致有两种方案:uglBitmapWrite()和uglBitmapBlt()。

uglBitmapWrite()的作用是将DIB直接搬移到一个DDB设备,当这个设备就是Display时,那就是绘制到屏幕了。第二种方案是,先用uglBitmapCreate()将DIB转换为DDB,然后使用uglBitmapBlt()将这个DDB位图搬移到DDB设备;如果需要拉伸,可以使用uglBitmapStretchBlt()。uglBitmapCreate()的另一个优势是,通过第三个参数UGL_DIB_CREATE_MODE createMode,可以轻松创建纯色的位图。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 这里只有VxWorks 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档