分享
 
 
 

图元文件

王朝百科·作者佚名  2010-03-05
窄屏简体版  字體: |||超大  

图元文件:扩展名是.wmf(Windows 图元文件格式 (WMF),Windows 兼容计算机的一种矢量图形和光栅图格式,通常用于字处理剪贴画。

一、 wmf格式是什么?

---- Wmf是Windows Metafile 的缩写,简称图元文件,它是微软公司定义的一种Windows平台下的图形文件格式。我们先来解释几个名词:

---- 图元文件头(metafile header): 是一个数据结构,它定义了储存在图元文件中图象的尺寸、图元文件的大小、调色板的数目、图元文件中记录数、指向图元文件描述的指针(如果存在的话)、指向图元文件调色板的指针(如果存在的话)。

---- 图元文件设备上下文(metafile DC): 是一个用户图元文件操作的设备上下文。

---- 图元文件句柄表(metafile handle table): 是标识用来建立存储在图元文件中的笔、刷子、字体以及其它对象的一组句柄。

---- 图元文件调色板(metafile palette): 是一组红、绿、蓝的值,这些值表示建立存储在图元文件中的图象时所使用的颜色。

---- 图元文件记录(metafile record): 是一个可变长的结构,结构中包含了诸如建立图象时设备的分辨率、图象的大小以及建立图象时所需要的GDI函数。

---- 有了上面的概念,我们就可以给wmf格式文件一个定义:

---- 图元文件是一个以二进制编码的、设备无关格式的多个结构的集合,这些结构包括图元文件头、调色板(可选的)、图元文件内容的文本描述(可选的)、图元文件记录。

---- 图元文件分为内存图元文件和磁盘图元文件。内存图元文件是仅在内存某一个区域进行操作并存放的,大多用于图象的绘制、拷贝或者进程间的剪切板图形共享;磁盘图元文件则主要用于将绘制图象保存到磁盘文件中,以便事后重看。

---- 二、 wmf格式的特点

---- wmf格式文件的特点如下:

---- 1. wmf格式文件是Microsoft Windows操作平台所支持的一种图形格式文件,目前,其它操作系统尚不支持这种格式,如Unix、Linux等。

---- 2. 与bmp格式不同,wmf格式文件是设备无关的,即它的输出特性不依赖于具体的输出设备。

---- 3. 其图象完全由Win32 API所拥有的GDI函数来完成。

---- 4. wmf格式文件所占的磁盘空间比其它任何格式的图形文件都要小得多。

---- 5. 在建立图元文件时,不能实现即画即得,而是将GDI调用记录在图元文件中,之后,在GDI环境中重新执行,才可显示图象。

---- 6. 显示图元文件的速度要比显示其它格式的图象文件慢,但是它形成图元文件的速度要远大于其它格式。

---- 三、 wmf格式的应用场合

---- 由图元文件的特点,可知图元文件与其它格式的图象文件差别很大。

---- 首先,由于图元文件是以图象绘制操作序列来存放数据的,因此,它不适合于图象处理领域;其次,由于图元文件的图象显示速度慢,因此也不适合于需要快速显示的场合。

---- 但是,微软之所以设计了这种格式,自然有它独特的地方,这就是wmf格式文件所占的磁盘空间比其它任何格式的图形文件都要小得多。也就是说,只要用对场合,只这一条,便可击败所有格式无对手。

---- 一般地,图元文件的适用场合如下:

---- 1. 由采集数据绘制曲线的图象快速保存。

---- 2. 进程间的图象剪切板数据交换。

其实,wmf格式也有着它独特的优越性

关于应用实例

1. 功能设计

---- (1) 建立图元文件 为减少程序篇幅,这里假设将产生的图元文件保存到一指定的文件名Myfile.wmf,另外,将图形假设为一正弦波。

---- (2) 显示图元文件 打开图元文件MyFile.wmf,将刚才产生的图形恢复到显示器上。

---- 2. 软件结构

---- 在Windows 98平台下,采用Visual C++ 6.0 开发工具,其软件结构使用MFC的单文档(SDI)框架。

---- 3. 程序实现

---- (1) 使用MFC AppWizard向导产生一应用框架

---- 在VC++的“File”菜单中,单击“New”,弹出一New对话框。在“Projects”页中选择“MFC AppWizard [exe]”,在“Project name”编辑框中填入“MyWMF”,按“OK”按钮,退出New对话框。

---- 在“MFC AppWizard Step 1”对话框中选择单选钮“Single document”,按“Finish”按钮即可完成应用框架的定制。

---- (2) 在视类的头文件MyWMFView.h中增加成员变量

---- HMETAFILE m_hMetaFile;

---- (3) 增加“建立图元文件”和“显示图元文件”菜单

---- 在“ResourceView”中,双击“Menu”下的“IDR_MAINFRAME”,在右边的窗口里,增加菜单“建立图元文件”,其标识为“ID_CREATEMETAFILE”;增加菜单“显示图元文件”,其标识为“ID_DISPMETAFILE”。

---- (4) 增加两个菜单所对应的消息处理函数

---- 在VC++的“New”菜单中,单击“ClassWizard”,弹出一“MFC ClassWizard”对话框。在“Class Name”组合框中选择“CMyWMFView”,在“Object IDs”列表框中选择“ID_CREATEMETAFILE”,在右边的“Messages”列表框中双击“COMMAND”,之后弹出一对话框,点击 “OK”按钮,即建立了一个消息处理函数“OnCreateWMF()”;使用同样的方法建立“ID_DISPMETAFILE”的消息处理函数 “OnDispWMF()”。

---- (5) 在视类的执行文件MyWMFView.cpp的开始中增加头文件定义

---- #include “math.h”

---- (5) 在消息处理函数“OnCreateWMF()”中增加代码如下:

----

//类CMetaFileDC的实例化

CMetaFileDC metaFileDC;

//建立图元的输出文件

metaFileDC.Create("MyFile.wmf");

//设置文本颜色和笔颜色

metaFileDC.SetTextColor(RGB(255,0,0,));

CPen thePen(PS_SOLID,1,RGB(0,0,255,));

CPen * pOldPen=metaFileDC.SelectObject(&thePen);

//在图元文件中绘制矩形框

metaFileDC.Rectangle(15, 15, 530, 230);

//在图元文件中绘制正弦波

for (int i=1; i< 500; i++)

{

metaFileDC.MoveTo(20+i-1, 120-80*sin(0.1*(i-1)));

metaFileDC.LineTo(20+i, 120-80*sin(0.1*i));

}

//在图元文件中绘制文本

metaFileDC.TextOut(200,250,"图6

电机载荷正弦波曲线图");

//恢复缺省的笔

metaFileDC.SelectObject(pOldPen);

//将以上绘制写入图元文件MyFile.wmf,关闭之,

最后返回图元文件的句柄

m_hMetaFile = metaFileDC.Close();

(6) 在消息处理函数“OnDispWMF()”中增加代码如下:

//定义一个客户区设备上下文,用于显示图元文件

CClientDC clientDC(this);

//打开图元文件,返回图元文件句柄

HMETAFILE hmf=GetMetaFile("MyFile.wmf”);

//显示图元文件,再现所绘制的曲线

clientDC.PlayMetaFile(hmf);

---- (7) 经过编译、链接,形成可执行文件 MyWMF.exe。

---- 使用时先点击菜单“建立图元文件”,即可发现,在当前文件夹下,生成一个新文件MyFile.wmf;然后,再点击菜单“显示图元文件”,即可在客户区显示一幅正弦波曲线。

---- 五、 结束语

----虽然WMF格式其结构定义比较复杂,但通过上面的编程实践,可见其实现起来并不复杂。这主要得力于MFC将内部复杂的处理封装在CMetaFileDC类中,对这个类的正确使用,即可达到事半功倍的效果。另外,我们在比较某某图象格式时,不能一言以蔽之,武断地说某某好某某不好,而应该结合具体的应用场合。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有