欢迎光临112期刊网!

高性能Windows图

日期:2023-01-24 阅读量:0 所属栏目:计算机应用


摘 要 该文首先概述高性能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和颜色表的指针,还可以创建和选择新的绘图面或修改现有绘图面的颜色表。应用程序可以创建一个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编程。首先创建项目文件,设置link加库。具体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编辑框中加入连接库。
struct{
bitmapinfoheader header;
rgbquad acolors[256];
} info;
cwing32view::cwing32view()
{

=
sizeof(bitmapinfoheader);
h = 176;
ht = 144;
es = 1l;
ount = 24l;
ression = 0l;
image =
(long)(176l*144l*3l);
spermeter = 0;
spermeter = 0;
sed = 0;
mportant = 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();
=
sizeof(bitmapinfoheader);
h =
dibwidth(pcurrentdib);
ht =
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安装程序,然后就可执行。
用visual c++ 2.0编译源程序,必须将wing图形库连接(link)到可执行文件中(见文中所述)。 本文链接:http://www.qk112.com/lwfw/jsjlw/jisuanjiyingyong/244265.html

论文中心更多

发表指导
期刊知识
职称指导
论文百科
写作指导
论文指导
论文格式 论文题目 论文开题 参考文献 论文致谢 论文前言
教育论文
美术教育 小学教育 学前教育 高等教育 职业教育 体育教育 英语教育 数学教育 初等教育 音乐教育 幼儿园教育 中教教育 教育理论 教育管理 中等教育 教育教学 成人教育 艺术教育 影视教育 特殊教育 心理学教育 师范教育 语文教育 研究生论文 化学教育 图书馆论文 文教资料 其他教育
医学论文
医学护理 医学检验 药学论文 畜牧兽医 中医学 临床医学 外科学 内科学 生物制药 基础医学 预防卫生 肿瘤论文 儿科学论文 妇产科 遗传学 其他医学
经济论文
国际贸易 市场营销 财政金融 农业经济 工业经济 财务审计 产业经济 交通运输 房地产经济 微观经济学 政治经济学 宏观经济学 西方经济学 其他经济 发展战略论文 国际经济 行业经济 证券投资论文 保险经济论文
法学论文
民法 国际法 刑法 行政法 经济法 宪法 司法制度 法学理论 其他法学
计算机论文
计算机网络 软件技术 计算机应用 信息安全 信息管理 智能科技 应用电子技术 通讯论文
会计论文
预算会计 财务会计 成本会计 会计电算化 管理会计 国际会计 会计理论 会计控制 审计会计
文学论文
中国哲学 艺术理论 心理学 伦理学 新闻 美学 逻辑学 音乐舞蹈 喜剧表演 广告学 电视电影 哲学理论 世界哲学 文史论文 美术论文
管理论文
行政管理论文 工商管理论文 市场营销论文 企业管理论文 成本管理论文 人力资源论文 项目管理论文 旅游管理论文 电子商务管理论文 公共管理论文 质量管理论文 物流管理论文 经济管理论文 财务管理论文 管理学论文 秘书文秘 档案管理
社科论文
三农问题 环境保护 伦理道德 城镇建设 人口生育 资本主义 科技论文 社会论文 工程论文 环境科学