如何提取RTF文件中的图片(200分)

  • 主题发起人 主题发起人 lanyaoshi
  • 开始时间 开始时间
L

lanyaoshi

Unregistered / Unconfirmed
GUEST, unregistred user!
已知道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&ID=636&page=1
,但我在本机打开导出的wmf文件,发现宽度与长度都变得很大了,不再是原来的:宽:16,长:26。我想,可能还差一步,就是给提取出来的图片文件指定宽度与长度了。
 
后退
顶部