如何提取RTF文件中的图片

文章作者 100test 发表时间 2010:02:09 12:20:32
来源 100Test.Com百考试题网


已知道RTF格式中的图片文件是以metafile格式存在的,以{\pict\wmetafile8\picw423\pich688\picwgoal240\pichgoal390开始,然后是metafile的HEX字符串,但不知道如何将这一大段HEX字符串保存为BMP文件或metafile格式文件呢? 下面是一段包含图片的RTF文件的内容: {\rtf1\ansi\ansicpg936\deff0{\fonttbl{\f0\fnil\fcharset134 \cb\ce\cc\e5.}} \viewkind4\uc1\pard\lang2052\f0\fs18{\pict\wmetafile8\picw423\pich688\picwgoal240\pichgoal390 010009000003160300000000f102000000000400000003010800050000000b0200000000050000 000c021b001100030000001e000400000007010400f1020000410b2000cc001a00100000000000 1a0010000000000028000000100000001a00000001000800000000000000000000000000000000 00000000000000000000000000ffffff00fbfcfd00ced2ec00a4aee80095a3f100c7cbe300eff0 f900e4e5eb006472d1005c68c7009aa0cf00949acd004c59c300273fde00465bd800bdc1df00e1 e2e700848bc200fdfdfe007f86c300122be000051bd700a5a9cb00f4f4f5007a8ae2003b46ac00 0f1fac00dbdce400354be0006b72ab00b9bedb000c25dd000112b900868aaf008898e100182cca 00777ca800ebedf3004f569700f8f9fb005d71de000c21c800636aa5005065db00091dbf002c35 9000fbfbfc00424a94007282de00424a8d0008128d000210a800a5acda00c8cad8004954bb001a 27a400dee1ea00303ba900daddee003f4fc300f7f7f900202da900d1d3e400d6d9e90000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101013d3f10402801010101010101010126222e3e0a090d1713010101010101081a343a3b01 133b3c2b3d010101012f3721381101010101391b25130101013516212201010101011329333601 0113091633080101010101011934250101282c2a3001010101010101312d32130128292a2b0101 01010101022c2d2e2f0113232425010101010101260e2127010101101d1e0101010101011f2021 2201010118191a1301010101130d161b1c01010101110f12130101011415161701010101010108 090a0b0c0d0e0f1001010101010101010203040504060701010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010101040000002701ffff030000000000 } \par }这方面可能用的人不多. 帮顶吧.這篇文章也許對你有用 RTF文件对图形的处理是一个很重要的问题,也是实现备课系统的一个难点。在RTF文件中,图形以两种方式存在。第一种是直接嵌入的方式,以"\pict"命令开始,第二种方式将图片作为OLE对象嵌入,以"\object"命令开始。并且无论以那种方式,整个图片的数据都是由一对大括号括起来的(即"{\object ……}")。每一个OLE对象在RTF中分为两个部分,第一部分是OLE的数据,如果RTF的文件解释器能进行OLE操作时,可以利用这部分的数据得到OLE的属性参数并对其进行修改显示,第二部分由"\result"命令引出,后面跟的其实是一个图片,当RTF的文件解释器不能进行OLE操作时,则可以简单的显示该图片。但这样就不能对该OLE对象进行修改了。图片数据是以Microsoft内部使用的一种矢量图"METAFILE"格式来存储的。在RTF中存放了一个完整的METAFILE文件,但其数据是以ASCII字符的方式存在。由于大多数浏览器都不支持这种格式的图片文件,因此需要将其转换成通用的图片格式,例如:BMP、GIF、JPG等等,但是在Microsoft Windows的软件开发手册中没有对METAFILE进行说明,因此无法对起进行直接的转换,但是在Microsoft Windows的软件开发包(SDK)(software develop kid)中有两个函数"GetMetaFile"和"PlayMetaFile",这两个函数可以将一个METAFILE格式的图片直接显示在屏幕上,这样就为格式的转换提供了方便,方法是:首先将以ASCII字符形式存放在RTF中的METAFILE文件变成以16进制数形式存放的独立的文件保存在磁盘的一个临时文件中,然后用"GetMetaFile"和"PlayMetaFile"将其显示在屏幕上(这里的屏幕实际上是一个虚拟的屏幕,即在内存中建立一个假的屏幕数据结构--Memory DC,里面有虚拟的显示内存,因此在实际的屏幕上看不见图片的显示)。然后用抓图的方法就可以将图片的像素取出来并将其保存成BITMAP图片格式文件了001zqk这篇文章很有参考价值,感谢。网友Kingron已经给出一个解决方案http://lysoft.lz169.com/kingron/bbs/dispbbs.asp?boardID=6

相关文章


搏击人生是属于年轻人的:GMAT经验GMAT考试
CD精华文选摘:掌中的粗沙 21天770详细计划GMAT考试
CD精华文选摘:广州考场吃喝指南GMAT考试
澳大利亚墨尔本大学高分学生可免掉GMAT考试GMAT考试
如何提取RTF文件中的图片
大仙论道之PREP的形合VS意合汇总GMAT考试
肺腑之言:两个月的GMAT复习经验GMAT考试
计量方法在GMAT逻辑中的思维体现GMAT考试
GMAT复习方法对话录不要存在投机心理GMAT考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛