显示DWG文件缩略图的三种方法.doc

上传人:土8路 文档编号:10286169 上传时间:2021-05-05 格式:DOC 页数:4 大小:394KB
返回 下载 相关 举报
显示DWG文件缩略图的三种方法.doc_第1页
第1页 / 共4页
显示DWG文件缩略图的三种方法.doc_第2页
第2页 / 共4页
显示DWG文件缩略图的三种方法.doc_第3页
第3页 / 共4页
显示DWG文件缩略图的三种方法.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《显示DWG文件缩略图的三种方法.doc》由会员分享,可在线阅读,更多相关《显示DWG文件缩略图的三种方法.doc(4页珍藏版)》请在三一文库上搜索。

1、显示 D W G 文件缩略图的三种方法白桂梅 ,张丽娟(洛阳大学 ,河南 洛阳 471023)摘 要 : Windows2000 以后的版本对于有些图形文件提供直接预览功能 , 而对有的图形文件则不提供 , AutoCAD 的. DW G文件就是其中之一 ,如果想预览必须安装第三方提供的插件 。文中所介绍的是三种编程实现. DW G 文件的预览方法 ,尤其 是方法三 ,其运行环境完全独立 ,不借助于任何第三方控件 ,可适用于任何语言编写的 Windows 程序 ,并且读取速度很快 。 关键词 :缩略图 ;控件 ; . DW G 文件 ;位图文件中图分类号 : TP311152文献标识码 :A文

2、章编号 :1005 - 3751 ( 2003) 09 - 0074 - 04Three Methods of Displaying. D W G Files Thumbna ilBA I Gui2mei , ZHAN G Li2juan(L uoyang U niversity ,L uoyang 471023 ,China)Abstract :The later versio n af ter Windows2000 directly offers t he f unctio n of p reviewing so me t ypes of drawing files , but do n

3、ot hing of t he ot hers. Auto CADs. DW G file is o ne of t he ot hers. In o rder to p review t he file , so me t hird sof t ware is needed. Three p rogrammingmet ho ds of p reviewing. DW G file are int ro duced in t his paper . Particularly t he t hird is co mpletely independent in it s running envi

4、ro nment . And no ot her t hird co nt rol is needed. Mo reover any Windows p rogram wit h sho rter running time can realize t his met ho d.Key words :t humbnail ;co nt rol ; . DW G File ; . BM P File在使用 Windows 操作系统时 , 经常要用到文件的查询和检索 ,2000 以后的版本对有些图形文件提供直接预 览功能 ,能够实现详细浏览和缩略图格式的随时切换 ,如此就能根据图形的大概轮廓直接找到

5、想要的文件 。但是对于有些图形文件 Windows 本身不提供直接的预览 , 如 果想预 览 必 须 安 装 第 三 方 提 供 的 插 件 , 如 : CDR 文 件 ( CorelDRAW 文 件 格 式) 需 安 装 CorelDRAW 软 件 Win2 dows 才 能 预 览 , D GN 文 件 必 须 安 装 Micro Station 。然 而 DW G 文件 ( AutoCAD) 文 件 格 式 较 为 特 殊 , 即 使 安 装 过 AutoCAD (2002 之 前 版 本) , Windows 仍 然 无 法 预 览 。而 AutoCAD ( R14 以后版本) 在自己

6、定制的打开文件对话框 中已经带有文件的缩略图预览功能 ,那么能否用编程实现 缩略图预览呢 ? 回答是肯定的 。下面以 Visual C + + 为例编程实现缩略图的预览 。(1) 新建一个工程 ,命名为 DwgView ;(2) 切换到对话框编辑状态 ,单击右键菜单 ,使用 In2 sert ActiveX Cont rol ,选中 AutoCAD dwg Thumbnail Con2 t rol ,点击 O K(如图 1 所示) ;图 1 添加控件(3) 把此控件的控制变量命名为 m- ct rlDwgView ; (4) 添加一个按钮用于显示缩略图文件 ;(5) DwgViewDlg. h

7、 源程序如下 : ( 非加黑部分为系统 缺省添加)# include“Dwg Thumbnail . h”/ / CDwgViewDlg dialogclass CDwgViewDlg : p ublic CDialo g/ / Const ruction1方 法 一 使 用 D wgThumbna il . ocx 控 件 读 取文件缩略图安装 过 AutoCAD2002 后 在 系 统 目 录 下 生 成 一 个Dwg Thumbnail . ocx 文件 ,使用 ActiveX 技术添加控件到工 程中1 ,具体步骤如下 :收稿日期 :2003 - 05 - 31作者简介 :白桂梅 ( 1

8、964 ) ,女 ,山西孝义人 ,硕士 ,讲师 ,研究方向为 计算机软件工程 。2 方法二 使用 ObjectA RX新建一个 ObjectARX 工程 ( AutoDesk 厂商提供 CAD开发包2 ,可到 www . autocad. co m 网站上下载) , 添加一 个对话框3 ,在对话框上添加一个静态控件命名为 CStat2 ic m- ct rlDwgView ,步骤如下 :添加对话框 On Paint 事件 ,修改代码为 :void CDwgViewDlg : :On Paint ( )CPaintDC dc ( t his) ;/ / device context for pa

9、inting m - ct rlDwgView . Enable Window ( TRU E) ;CSt ring st r FileName = - T (“E : 00670 . dwg”) ;if ( ! acdbDisplayPreview Fro mDw g ( st r FileName , m - ct rlD2wgView . m - h Wnd) )m - ct rlDwgView . Enable Window ( FAL SE) ;编译生成 DwgViewDlg. arx 程序 , 启动对话框 , 加 载 程序运行 。p ublic :CDwgViewDlg ( CWn

10、d 3const ructor/ / Dialog DataNULL ) ; / /p Parent=standard/ / AFX - DA TA ( CDwgViewDlg)enum IDD = IDD - DW GV I EW - DIAL O G ; CDwg Thumbnail m - ct rlDwgView ;/ / AFX - DA TA/ / ClassWizard generated virt ual f unction overrides/ / AFX - V IR TUAL ( CDwgViewDlg)protected :virt ual void DoData Ex

11、chan ge ( CData Exchange 3DDX/ DDV support/ / AFX - V IR TUAL/ / Implementation protected :HICON m - h Icon ;/ / Generated messa ge map f unctions/ / AFX - MS G( CDwgViewDlg)virt ual BOOL On InitDialo g ( ) ;pDX) ; / /af x - msg void OnSysCo mmand ( U IN T n ID ,L PARAMl Param) ;af x - msg void On P

12、aint ( ) ;af x - msg HCU RSOR OnQuer yDrag Icon ( ) ;af x - msg void OnBut ton Test ( ) ;/ / AFX - MS GD ECL AR E - M ESSA GE - MAP ( ) ;DwgViewDlg. cpp 源程序如下 : (非加黑部分为系统缺省添 加)3方法三 二进制方式打开 DWG 文件定位读取 BMP 缩略图信息此方法利用 DW G 文件本身已经存储缩略图信息这 一特性 ,以二进制方式打开 DW G 文件 , 定位文件位置直接读取缩略图信息 。缩略图在 DW G 文件中的存储结构 信息如表

13、1 所示 ,设 DW G 文件的起始偏移量为 0 ,则在第表 1 缩略图在 DW G 文件中的存储结构信息voidCDwgViewDlg : :OnBut tonSet FileName ( )/ / 让控件显示 E : 00670 . dw g 文件缩略图m - ct rlDwgView . SetDwgFileName (“E : 00670 . dwg”) ;13 字节处是一个长整型的指针 ,指向预览图片特征字段( sentinel) 的开始位置 ,特征字段的长度为 16 字节 ,在特征 字段之后 ,是一个 4 字节的长整数 ,它说明的是除特征字 段之外整个预览图片数据的长度 ,其后是说

14、明预览图片数 量的一个单字节整数 ,在 DW G 文件中可以选择不保存预 览图片 ,保存 BM P 和/ 或 WM F 格式的预览图片 ,这一情 况就由预览图片数量字节表示 , 根据预览图片数量的不 同 ,后面是一至三组数据描述块 ,每一块由 9 个字节组成 , 第一个字节是图片的类型 ,25 字节是图片的实际位置 ,69 字节是图片的大小 ,图片类型字节可以取值 1 , 2 或3 。取值为 1 时说明是图形的描述内容 ,它的长度至少需 要有 80 字节 ,即使实际使用的部分不足 80 字节 ,系统也 会为他保留 80 字节 。当取值为 2 时说明是 BM P 图片 ,在 DW G 文件中保存

15、的 BM P 图片可是任何满足 BM P 规范(6) 编译程序运行 ,点击按钮 ,界面如图 2 所示 。图 2 运行结果thumbnail sentinel - 16 bytessize of thumbnail data - 4 bytesnumber of thumbnail objects - 1 bytearray of thumbnail object descriptors(0 thru n - 1)type of object - 1byteoff set of object f rom start of dwg - 4 bytessize of object - 4 bytes

16、thumbnail data for objects 0 thru n - 1inverse thumbnail sentinel的图像文件数据 , 但是不保存 B I TMA PF IL EHEAD ER 数据 。Auot CAD 系统保存的 BM P 图像数据是 256 色图像 数据并使用 B I - RL E8 格式压缩 。图片类型字节取值为 3 时说明是 WM F 文件 ,它带有 22 字节长的 Aldus 文件头 。 在数据描述块的后面是所有既存的预览图片数据 ,随后跟 随的是 16 字节按位取反的特征字节 。B I TMA PF IL EHEAD ER 是由 Windows 系统规

17、定的数据类型 ,它的长度为 14 字节 ,具体定义是 :Type B I TMAPF IL EHEAD ERbf Type As Integer bf Size As Longbf Reserved1 As Inte gerbf Reserved2 As Ingeger bf OffBit s As LongEnd Type在 DW G 文件中 , 预览图片的特征字段长度为 16 字 节 ,它的内容为 :OX1 F ,OX25 ,OX6D ,OX07 ,OXD4 ,OX36 , OX28 , OX28 , OX9D , OX57 , OXCA , OX3 F , OX9D , OX44 ,OX

18、10 ,OX2B程序的头文件包括 :constDwgSentinel = 0x01 F , 0x25 , 0x6D , 0x07 , 0xD4 , B YT E 0x36 ,0x28 , 0x28 , 0x9D , 0x57 , 0xCA , 0x3 F , 0x9D , 0x44 , 0x10 , 0x2B ,0x0 ;const int iDwg ThumbnailOff set = 13 ;st ruct SDwg Headerchar Sentinel 16 ; unsigned long Size ; char Num ; ;st ruct S Thumbnail Infochar

19、Type ;unsigned long Off set ;unsigned long Size ; ;实现文件包括 :BOOL CDwgViewDlg : : ReadDwgFile ( CSt ring st r ReadFileName , CSt ring st r Save FileName)/ / dwg file infor mation/ / pDib - Empt y ( ) ;B I TMAPF IL EHEAD ER bmp Header ; SDwg Header Dwg Header ;S Thumbnail Info Thumbnail Info ;long off

20、set ; CFile file ;bool FindSi gn = false ;if ( file . Open ( st r ReadFileName , CFile : : modeRead | CFile : :shareDenyNone) )if ( file . GetLengt h ( ) = unsigned long ( file . GetLengt h ( ) ) )file . Close ( ) ;ret urn FAL SE ;file . Seek (off set ,CFile : : be gin) ; CSt ring st rbuf ;file . Re

21、ad ( st rbuf . GetBuffer ( 17) ,16) ;if ( memcmp ( st rbuf , (char 3 ) DwgSentinel ,16) = = 0)file . Seek (off set ,CFile : : be gin) ;file . Read ( ( void 3 ) &Dwg Header ,21) ;for (int i = 0 ;i Dwg Header . Num ;i + + )char t ype ;file . Seek ( off set + 21 + ( i 3 9 ) , CFile : : be2gin) ;file .

22、Read ( ( void 3 ) &t ype ,1) ;if ( t ype = = 2)Thumbnail Info . Type = t ype ;file . Read ( ( void 3 ) & Thumbnail Info . Off 2set ,4) ;file . Read ( ( void 3 ) & Thumbnail Info . Size ,4) ;FindSign = t rue ;if ( FindSign)if ( Thumbnail Info . Type = = 2)H GL OBAL glob = ( H GL OBAL ) : : GlobalAllo

23、c ( GM EM - MOV EABL E | GM EM - ZERO IN I T , Thumbnail Info . Size) ;if ( glob = = 0)ret urn false ;file . Close ( ) ;memfile . Seek ToBe gin ( ) ;memfile . Close ( ) ;L PS TR pDIB = ( L PS TR) : : GlobalLock ( ( H GL OBAL )glob) ;/ 3 Go and read t he bit s 3 /file . Seek ( Thumbnail Info . Off se

24、t ,CFile : : be gin) ;if (file . Read ( pDIB , Thumbnail Info . Size ) ! = Thumbnail2Info . Size): : Global Unlock ( ( H GL OBAL ) glob) ;: : Global Free ( ( H GL OBAL ) glob) ;glob = NULL ;ret urn false ;bmp Header . bf Type = ( ( WORD) (M 8) | B) ;ret urn t rue ;file . Close ( ) ;ret urn FindSi gn

25、 ;4结束语以上三种方法的特点是 : 方法一借助 AutoDesk 公司 提供的控件 ,安全稳定 ,但是程序运行必须先安装此控件 ,而且不能直接读位图结构到内存中 ,使用起来不灵活 ; 对 方法二 ,程序必须借助 AutoCAD 运行 ,不能应用于其他可执行程序 ;方法三完全独立 ,不借助于任何第三方控件 ,可bmp Header . bf Size = Thumbnail Info . Size(B I TMAPF IL EHEAD ER) ;bmp Header . bf Reserved1 = 0 ;bmp Header . bf Reserved2 = 0 ;+sizeofbmp He

26、ader . bf OffBit s = sizeof (B I TMAPF IL EHEAD ER) ;CFile memfile ;if ( ! memfile . Open ( st r Save FileName , CFile : : modeCreate| CFile : : modeReadWrite) ): : Global Unlock ( ( H GL OBAL ) glob) ;: : Global Free ( glob) ;file . Close ( ) ;ret urn false ;memfile . Write ( &bmp Header , sizeof (

27、 B I TMAPF IL E2HEAD ER) ) ;memfile . Write (pDIB , Thumbnail Info . Size) ;: : Global Unlock ( ( H GL OBAL ) glob) ;: : Global Free ( glob) ;适用于任何语言编写的 Windows 程序 ,并且读取速度快 。对于方法三中至关重要的 DW G 文件存储结构信息 ,是笔者作为 www . autocad. co m 网站的 ADN 会员 ,从该网站对 会员 开 放 的 相 关 资 料 中 获 得 的 。以 上 程 序 均 在 Win2dows2000 ,Vis

28、ual C + + 6 . 0 下调试通过 。参考文献 :朱战立 1 面向对象程序设计与 C + + 语言M 1 西安 : 西安电子科技大学出版社 ,2002 . 227 - 235 .余 承 飞 , 方勇 1AutoCAD 二 次 开 发 技 术 ( Object ARX) M 1 北京 :人民邮电出版社 ,1999 . 5 - 14 .刘路放 1Visual C + + 与面向对 象 程 序 设 计 教 程 M 1 北 京 :高等教育出版社 ,2000 . 150 - 163 .123(上接第 73 页)从图 2 可以看出 ,L RU - L FU 管理策略的访问命中 率明显高于 L RU

29、 管理策略的访问命中率 ,而且更接近于 L FU 管理策略的访问命中率 。起来 。参考文献 :1Tanenbaum A S , Woodhull A S. OP ERA TIN G S YS T EMS :Design and Implementation 2nd Ed M . 北京 : 清华大学出 版社 ,2001 .陈莉君. Linux 操作系统内核分析M . 北京 : 人民邮电出 版社 ,2000 .J eon H S , No h S H. Dynamic Buffer Cache Mana gement Scheme based on Si mple and Aggressive P

30、refetchingR . At 2 lanta , U SA : U SEN IX ,2000 .Huilie ,Duchamp D. An Anl ytical Approach to File Prefetchin gR . Anahei m CA , U SA : U SEN IX , 1997 .Cao Pei , Felten E W. Implementation and Perfor mance of In2 tegrated Application - Cont rolled File Cachin g , Prefetching , and Disk SchedulingJ

31、 . ACM Transactions on Co m p uter Sys2tems ,1996 , 14 ( 4) :311 - 343 .4结论综合执行效率和访问命中率两个因素 ,执行效率介于 L RU 管理策略和 L FU 管理策略之间的 L RU - L FU 管理 策略 ,凭 借 其 较 为 理 想 的 访 问 命 中 率 可 以 有 效 地 提 高M IN IX2 . 0 文件系统文件属性信息的访问效率 ,从而对整个 M IN IX2 . 0 文件系统性能的提高做出了一定的贡献 。 但是 与 L RU 管 理 策 略 和 L FU 管 理 策 略 一 样 , L RU -L FU 管理策略也是一种与应用无关的管理策略 , 因此即 使再调大 N R - INOD ES 值 , 其对访问命中率的提高也是有限的 。为取得更高的访问命中率 ,我们未来的工作将集 中于如何将 L RU - L FU 管理策略与实际的应用程序结合2345

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1