在RTF里表情图像与表情代码的互逆

在论坛上发了贴子关于如何在RTF里把插入的图片转化成自定义的表情代码

并可逆.

http://community.csdn.net/Expert/topic/3874/3874035.xml?temp=.2201197

首先非常感谢那些提出建议的朋友也感谢帮我顶的朋友.由于时间比较急,问题算是解决了.现在与大家分享一下.

记得在 richtextbox 里插入图片有N多种方法,在实际上在 richtextbox 里只有两种方式,一种是以 pict 开头的直接在 richtextbox 里插入,二种是以 object 开头的以 ole 的方式嵌入.我们讨论前种,由于代码比较多,我直接提供代码工程给大家下载.这种只谈谈一些解决的思路

RTF 没有可用的标志来标识图片 ( 目前还没有找到 J ), 所以要把图片转成表情代码 , 只能根据图片的特征码来定位图片 , 但是 71 张图片来查找其特征码实在是太麻烦了 , 所以先找到 71 张图片的最小特征码, 为简单起见我们选图片生成十六进制后,选前 N 个字节 , 此 N 能表示 71 张不同的图片 . 方法是逐个比较 ( 可用选择排序法 )r 找出此 N. 然后我们生成可序化文件 smile.bin, 包含每张图片的完整图片 , 图片特征码以及此图片代表的表情代码 .

正向转化 : 当要发送含有表情图片的消息时 , 由于包含图片 , 此 RTF 非常庞大 . 我们需要把图片部分的代码转成自定义的表情代码 , 比如 图片为 ”^-^” -- à ” : ) “.

在 RTF 里图片以 pict 开头我们可以把这部分的代码去掉并插入我们自定义的表情代码 . 方法是找出 pict 的前 500 个字节 (500 是 N, 我这里图片的 ) 与 smile.bin 中的图片特征码进行比较 , 奇怪是同一张图片两次生成的图片代码居然有些不一样 ( 不知 richtextbox 搞什么鬼 ), 所以引用的一个模糊因子 , 此因子为 28, 不同的图片可能不一样 . 这样进行匹配后 , 可找到表情代码了 .

反向转化 : 就是把表情代码转化成图像 , 这转化比正向简单 , 只要在 RTF 里找出我们自定义的表情代码根据 smile.bin 来找到相应的图像文件 , 但是这里有个问题 , 不能直接显示的 richtextbox 里插入表情代码前的 rtf 代码 , 因为这不完整 , 会引异常 , 必须要完整 , 这样在转化的过程必须借向一个 richtextbox 来负责图片的转化 .

其实如果 RTF 直接我们自定义的标签 , 那就不用这么麻烦了 . 但是直接给 richtextbox 赋值后 , 它会去掉这些它认为无用的标签 ( 苦 )

如果您有更好的方法请告诉我 .

效果如下 :

Published At
Categories with Web编程
Tagged with
comments powered by Disqus