高性能Windows图形开发库WinG

上传人:l****6 文档编号:38056342 上传时间:2018-04-26 格式:DOC 页数:4 大小:32KB
返回 下载 相关 举报
高性能Windows图形开发库WinG _第1页
第1页 / 共4页
高性能Windows图形开发库WinG _第2页
第2页 / 共4页
高性能Windows图形开发库WinG _第3页
第3页 / 共4页
高性能Windows图形开发库WinG _第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《高性能Windows图形开发库WinG 》由会员分享,可在线阅读,更多相关《高性能Windows图形开发库WinG (4页珍藏版)》请在金锄头文库上搜索。

1、1高性能 Windows 图形开发库 WinG 摘 要 该文首先概述高性能 Windows 图形开发库 WinG,然后讲解 WinG 的一些特点及充分发挥 WinG 性能所必须遵循的十条原则,最后举例说明其开发方法。一、概述在 Windows 下,由于其 GDI 设备无关性、窗口环境、缺乏通用图形库等限制影响了图形速度。图形速度慢成为选择 Windows 作为游戏平台的最大障碍。Windows 95 在保留 Windows 的最大优点设备无关性的同时,在 Win32 API 中新增一个 32 位调用 CreateDIBSection,使得图形速度得到很大提高。Microsoft 公司意识到图形

2、速度对于高质量软件的重要性,提供了 WinG(发音“Win Gee“,其中“G“代表游戏(Game)图形库。WinG 是为 Windows3.1、Windows for Workgroups 3.11、Windows95 和 Windows NT 设计的一种优化的高性能图形库,运行于 386 以上的处理器。WinG 能在Windows 环境中提供与 DOS 环境相当的游戏图形性能。程序员可以直接将内存中的设备无关位图(DIB)传送到屏幕,并且提供抖动(halftoning)API,利用标准Microsoft 抖动调色板支持对真彩色的仿真。二、WinGDC 和 APIWinG 提供一种新型设备描

3、述表 WinGDC,其用法类似于其它设备描述表,不同的是,程序员可以获取直接指向 WinGDC 绘图面、BITMAPINFOHEADER 和颜色表的指针,还可以创建和选择新的绘图面或修改现有绘图面的颜色表。应用程序可以创建一个 WinGDC 和创建一个或多个 WinGBitmap 用于绘图。一旦当前帧绘图、DIB 组织、Sprite(精灵)组织完成后,就可将 WinGDC 缓冲区拷贝到屏幕。这种双缓冲区结构减少了闪烁,使屏幕更新更平滑。2WinG API 包含如附表所示的函数和类型。附表WinGDC 不是调色板设备,是 RGB 设备。使用 WinGSetDIBColorTable,而不是Sel

4、ectPalette 修改设备的颜色表。三、WinG 调色板管理Windows 调色板管理器用于管理多个应用程序对同一个系统调色板的使用请求。它给每个应用程序分配一个虚拟 256 色的逻辑调色板,并在必要时将逻辑调色板中的颜色转换为系统调色板中的颜色。所谓对等(Identify)调色板,就是一个与当前系统调色板精确(1:1)匹配的逻辑调色板。它不需要进行调色板转换,因此将 WinGDC 传送到屏幕上时使用对等调色板能大大提高传送速度。抖动调色板是一个对等调色板,其中包含的颜色是经过精心挑选的,并进行了优化使得在 8 位设备上通过抖动模拟真彩色。应用程序可选取该调色板并在显示设备描述表中实现,以

5、便利用 WinG 提供的抖动技术。WinG 图形库提供两个支持抖动的 API:WinGCreateHalftonePalette 和 WinGCreateHalftoneBrush,利用它们可在 8位设备上仿真出 24 位真彩色。四、WinG 的 DIB 方向1.自下而上 DIBWindows DIB 的标准类型是自下而上的 DIB,即 DIB 总是指向内存中最底层的扫描线。坐标(0,0)对应于图像的左下角,而 Windows 将(0,0)对应于显示器和设备相关位图(DDB)的左上角,即自下而上 DIB 的 y 轴被颠倒了。对于 8 位自下而上 DIB,屏幕上像素(X,Y)在内存中的地址计算如

6、下:3/计算每扫描线实际比特数 DibWidthBits = (UINT)lpBmiHeader-biWidth * (UINT) lpBmiHeader-biBitCount/按 32 比特边界对齐DibWidthBytes = (DibWidthBits+31) (31) / 8; pPixelXY = DibAddr + (DibHeight-1-Y)*DibWidthBytes + X;2.自上而下 DIB其保存方向与大多数 DIB 相同,内存中的第一扫描线对应于图像的第一行。此时BITMAPINFOHEADER 结构的成员 biHeight 为负值。对于 8 位自上而下 DIB,屏幕

7、上像素(X,Y)在内存中的地址计算为:pPixelXY = DibAddr + Y*DibWidthBytes + X.五、充分发挥 WinG 性能方法为了最大限度地发挥 Windows 环境下的 WinG 的块传送性能,要求:取出单色图形调试卡和拆接网络连接器;保存 WinGBitmap 表面指针和 BITMAPINFO;避免重复 GDI 调用;专用函数可能比 GDI 函数执行速度快;对任何函数都要测试其执行速度;不要缩放位图;不要进行块传递;不要进行剪切操作;使用对等调色板;使用推荐的 DIB 格式。六、应用实例下面的例子讲解如何利用 WinG 图形库在 Windows95 下显示真彩色位

8、图(24 位)。4利用 Visual C+ 2.0 编程。首先创建项目文件 wing32.mak,设置 Link 加 wing32.lib库。具体 WinG 图形库和本例子完整源程序可与作者联系。首先选择 Tools|Options.菜单项,再选择 Directories 命令。在 Show Directories for下拉框中选择 Include files,增加目录 c:winginclude;选择 Library files,增加目录c:winglib;选择 Executable files,增加目录 c:wingbin。选择 Project|Settings.菜单项,再选择 Link

9、 命令。在 Object/Library Modules 编辑框中加入连接库 wing32.lib。struct BITMAPINFOHEADER Header; RGBQUAD aColors256; Info; CWing32View:CWing32View() Info.Header.biSize = sizeof(BITMAPINFOHEADER); Info.Header.biWidth = 176; Info.Header.biHeight = 144; Info.Header.biPlanes = 1L; Info.Header.biBitCount = 24L; Info.He

10、ader.biCompression = 0L; Info.Header.biSizeImage = (long)(176L*144L*3L); Info.Header.biXPelsPerMeter = 0; Info.Header.biYPelsPerMeter = 0; Info.Header.biClrUsed = 0; Info.Header.biClrImportant = 0; hBitsSrc = :GlobalAlloc(GHND, (long)(176L*144L*3L); pBitsSrc = (LPSTR):GlobalLock(hBitsSrc); CWing32Vi

11、ew:CWing32View() :GlobalUnlock( hBitsSrc ); :GlobalFree( hBitsSrc ); void CWing32View:OnPaint() 5CPaintDC dc(this); void far *pBits; hpalApp = WinGCreateHalftonePalette(); PDIB pCurrentDIB = DibOpenFile(“miss256.bmp“); HDC WinGDC = WinGCreateDC(); Info.Header.biSize = sizeof(BITMAPINFOHEADER); Info.

12、Header.biWidth = DibWidth(pCurrentDIB); Info.Header.biHeight = DibHeight(pCurrentDIB); HBITMAP WinGBitmap = WinGCreateBitmap(WinGDC, (BITMAPINFO far *)Info,pBits); WinGBitmap = SelectBitmap(WinGDC,WinGBitmap); HPALETTE OldPalette = :SelectPalette(dc.m-hDC,hpalApp,FALSE); :RealizePalette(dc.m-hDC); H

13、PALETTE WinGPalette = WinGCreateHalftonePalette(); HPALETTE OldWinGPalette = :SelectPalette(WinGDC,WinGPalette,FALSE); :RealizePalette(WinGDC); :StretchDIBits(WinGDC,0,0,DibWidth( pCurrentDIB),DibHeight(pCurrentDIB), 0,0,DibWidth(pCurrentDIB),DibHeight( pCurrentDIB),DibPtr(pCurrentDIB), DibInfo(pCur

14、rentDIB), DIB-RGB-COLORS,SRCCOPY); :SelectPalette(WinGDC,OldWinGPalette,FALSE); :DeleteObject(WinGPalette); int Width = DibWidth(pCurrentDIB); int Height = DibHeight(pCurrentDIB); WinGStretchBlt(dc.m-hDC,0,0,Width, Height, WinGDC,0,0, DibWidth(pCurrentDIB), DibHeight(pCurrentDIB); :SelectPalette(dc.m-hDC,OldPalette,FALSE); :SelectPalette(WinGDC,OldPalette,FALSE); :DeleteObject(SelectBitmap(WinGDC,WinGBitmap); :DeleteDC(WinGDC); 6注意,在 Windows 95 下执行 WinG 安装程序 Setup.exe,然后就可执行 Wing32.exe。用 Visual C+ 2.0 编译源程序,必须将 WinG 图形库 Wing31.lib 连接(link)到可执行文件 Wing32.exe 中(见文中所述)。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号