为了更好的视觉效果,WindML还提供了一种透明位图(Transparent Bitmap)。
typedef struct ugl_bmap_header
{
UGL_UINT16 type;
UGL_UINT16 width;
UGL_UINT16 height;
UGL_UINT16 maxWidth;
UGL_UINT16 maxHeight;
void *extension;
} UGL_BMAP_HEADER;
typedef UGL_BMAP_HEADER UGL_TDDB;
typedef UGL_TDDB *UGL_TDDB_ID;
UGL_TDDB_ID uglTransBitmapCreate
(
UGL_DEVICE_ID devId,
UGL_DIB *pDib,
UGL_MDIB *pMdib,
UGL_DIB_CREATE_MODE createMode,
UGL_UINT32 initValue,
UGL_DEVICE_MEM_POOL_ID poolId
);
UGL_TDDB_ID uglTransBitmapCreateFromDDB
(
UGL_DEVICE_ID devId,
UGL_DDB_ID ddbId,
UGL_MDDB_ID mDdbId,
UGL_DEVICE_MEM_POOL_ID poolId
);
UGL_STATUS uglTransBitmapDestroy
(
UGL_DEVICE_ID devId,
UGL_TDDB_ID tDdbId
);
UGL_STATUS uglTransBitmapRead
(
UGL_GC_ID gc,
UGL_TDDB_ID tDdbId,
UGL_POS srcLeft,
UGL_POS srcTop,
UGL_POS srcRight,
UGL_POS srcBottom,
UGL_DIB *pDib,
UGL_MDIB *pMdib,
UGL_POS dstX,
UGL_POS dstY
);
UGL_STATUS uglTransBitmapWrite
(
UGL_GC_ID gc,
UGL_DIB *pDib,
UGL_MDIB *pMdib,
UGL_POS srcLeft,
UGL_POS srcTop,
UGL_POS srcRight,
UGL_POS srcBottom,
UGL_TDDB_ID tDdbId,
UGL_POS dstX,
UGL_POS dstY
);
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
);
这种位图的主体图案由标准位图来定义;而需要透明显示的区域,由单色位图指定。使用uglBitmapBlt()进行绘制时,单色位图指示为1的区域表示绘制,指示为0的区域表示不绘制,也就是透明了。而使用uglBitmapStretchBlt()进行拉伸时,透明区域的处理方式是不一样的。先看看效果图