UGL之标准位图
时间:2022-07-26
本文章向大家介绍UGL之标准位图,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
位图操作是WindML 2D图形库里一个非常重要的功能。要想绘制位图,需要先了解两个名词
- DIB - Device Independent Bitmap
- DDB - Device Dependent Bitmap
顾名思义,DIB主要是给人用的,DDB主要是给显卡用的。与之相关的函数主要有这几个:
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,可以轻松创建纯色的位图。
- ShellExecute 启动外部程序 参数详细介绍
- 零基础学编程033:字符串的split拆分与join连接
- 零基础学编程032:生成二维码
- C#,一些非常简单但应该知道的知识点
- C#神奇的扩展方法
- 使用Python制作一个简单的刷博器
- 零基础学编程031:Python与其它语言最不同的一条语法规则
- dedecms批量导出新增文章url和标题
- 明理知意:复合索引优化及索引访问原理
- WCF配置文件与文件下载之坎坷路
- 零基础学编程030:像黑客般玩玩字符艺术
- Android获取SD卡总容量,可用大小,机身内存总容量及可用大小
- 零基础学编程029:程序员作图不用笔
- 零基础学编程028:面向对象编程OOP
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法