论文网首页|会计论文|管理论文|计算机论文|医药学|经济学论文|法学论文|社会学论文|文学论文|教育论文|理学论文|工学论文|艺术论文|哲学论文|文化论文|外语论文|论文格式
中国论文网

用户注册

设为首页

您现在的位置: 中国论文网 >> 计算机论文 >> 计算机应用论文 >> 正文 会员中心
 计算机应用论文   计算机理论论文   计算机网络论文   电子商务论文   软件工程论文   操作系统论文   通信技术论文
高性能Windows图

摘 要 该文首先概述高性能windows图形开发库wing,然后讲解wing的一些特点及充分发挥wing性能所必须遵循的十条原则,最后举例说明其开发方法。

一、概述
在windows下,由于其gdi设备无关性、窗口环境、缺乏通用图形库等限制影响了图形速度。图形速度慢成为选择windows作为游戏平台的最大障碍。
windows 95在保留windows的最大优点—设备无关性的同时,在win32 api中新增一个32位调用createdibsection,使得图形速度得到很大提高。microsoft公司意识到图形速度对于高质量软件的重要性,提
供了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和api
wing提供一种新型设备描述表wingdc,其用法类似于其它设备描述表,不同的是,程序员可以获取直接指向wingdc绘图面、bitmapinfoheader和颜色表的指针,还可以创建和选择新的绘图面或修改现有绘图面的颜色表。wWw.11665.Com应用程序可以创建一个wingdc和创建一个或多个wingbitmap用于绘图。一旦当前帧绘图、dib组织、sprite(精灵)组织完成后,就可将wingdc缓冲区拷贝到屏幕。这种双缓冲区结构减少了闪烁,使屏幕更新更平滑。
wing api包含如附表所示的函数和类型。
附表
wingdc不是调色板设备,是rgb设备。使用wingsetdibcolortable,而不是selectpalette修改设备的颜色表。

三、wing调色板管理
windows调色板管理器用于管理多个应用程序对同一个系统调色板的使用请求。它给每个应用程序分配一个虚拟256色的逻辑调色板,并在必要时将逻辑调色板中的颜色转换为系统调色板中的颜色。
所谓对等(identify)调色板,就是一个与当前系统调色板精确(1:1)匹配的逻辑调色板。它不需要进行调色板转换,因此将wingdc传送到屏幕上时使用对等调色板能大大提高传送速度。
抖动调色板是一个对等调色板,其中包含的颜色是经过精心挑选的,并进行了优化使得在8位设备上通过抖动模拟真彩色。应用程序可选取该调色板并在显示设备描述表中实现,以便利用wing提供的抖动技术。wing图形库提供两个支持抖动的api:wingcreatehalftonepalette和wingcreatehalftonebrush,利用它们可在8位设备上仿真出24位真彩色。

四、wing的dib方向

1.自下而上dib
windows dib的标准类型是自下而上的dib,即dib总是指向内存中最底层的扫描线。坐标(0,0)对应于图像的左下角,而windows将(0,0)对应于显示器和设备相关位图(ddb)的左上角,即自下而上dib的y轴被颠倒了。
对于8位自下而上dib,屏幕上像素(x,y)在内存中的地址计算如下:
//计算每扫描线实际比特数 dibwidthbits = (uint)lpbmihe
ader->biwidth * (uint) lpbmiheader->bibitcount
//按32比特边界对齐
dibwidthbytes = ((dibwidthbits+31) & (~31)) / 8;
ppixelxy = dibaddr + (dibheight-1-y)*dibwidthbytes + x;

2.自上而下dib
其保存方向与大多数dib相同,内存中的第一扫描线对应于图像的第一行。此时bitmapinfoheader结构的成员biheight为负值。
对于8位自上而下dib,屏幕上像素(x,y)在内存中的地址计算为:
ppixelxy = dibaddr + y*dibwidthbytes + x.

五、充分发挥wing性能方法
为了最大限度地发挥windows环境下的wing的块传送性能,要求:
·取出单色图形调试卡和拆接网络连接器;
·保存wingbitmap表面指针和bitmapinfo;
·避免重复gdi调用;
·专用函数可能比gdi函数执行速度快;
·对任何函数都要测试其执行速度;
·不要缩放位图;
·不要进行块传递;
·不要进行剪切操作;
·使用对等调色板;
·使用推荐的dib格式。

六、应用实例
下面的例子讲解如何利用wing图形库在windows95下显示真彩色位图(24位)。利用visual c++ 2.0编程。首先创建项目文件wing32.mak,设置link加wing32.lib库。具体wing图形库和本例子完整源程序可与作者联系。
首先选择tools|options...菜单项,再选择directories命令。在show directories for下拉框中选择include files,增加目录c:\wing\include;选择library files,增加目录c:\wing\lib;选择executable files,增加目录c:\wing\bin。
选择project|settings...菜单项,再选择link命令。在object/l
ibrary modules编辑框中加入连接库wing32.lib。
struct{
bitmapinfoheader header;
rgbquad acolors[256];
} 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.header.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);
}
cwing32view::~cwing32view()
{
::globalunlock( hbitssrc );
::globalfree( hbitssrc );
}
void cwing32view::onpaint()
{
cpaintdc dc(this);
void far *pbits;
hpalapp = wingcreatehalftonepalette();
pdib pcurrentdib =
dibopenfile("miss256.bmp");
hdc wingdc = wingcreatedc();
info.header.bisize =
sizeof(bitmapinfoheader);
info.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);
hpalette 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(pcurrentdib),
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);
}
注意,在windows 95下执行wing安装程序setup.exe,然后就可执行wing32.exe。
用visual c++ 2.0编译源程序,必须将wing图形库wing31.lib连接(link)到可执行文件wing32.exe中(见文中所述)。
  • 上一个计算机论文:
  • 下一个计算机论文:
  •  作者:陈涛 陈坚 [标签: 高性能 ]
    姓 名: *
    E-mail:
    评 分: 1分 2分 3分 4分 5分
    评论内容:
    发表评论请遵守中国各项有关法律法规,评论内容只代表网友个人观点,与本网站立场无关。
    关于ASP.NET的性能优化及其安全性的
    突发业务下ATM网络中的双速漏桶监管器性能分
    关于异构网络的垂直切换仿真建模及其性能评
    移动IP切换机制性能分析
    基于移动 Agent的数据采集系统实现与性能分
    高性能路由器中集成IS-IS协议路由稳定性研究
    基于AJAX技术提升Web考试系统性能的
    数据关联算法综述及其性能评估
    改善ASP.NET2.0性能方法研究
    软件性能测试研究
    软件性能测试需求的获取方法综述
    提高实时操作系统的实时性能和可靠性策略
    | 设为首页 | 加入收藏 | 联系我们 | 网站地图 | 手机版 | 论文发表

    Copyright 2006-2013 © 毕业论文网 All rights reserved 

     [中国免费论文网]  版权所有