The value of nFormat must be one of the following:
SF_TEXT Indicates writing text only.
SF_RTF Indicates writing text and formatting.
SF_RTFNOOBJS Indicates writing text and formatting, replacing OLE items with spaces.
SF_TEXTIZED Indicates writing text and formatting, with textual representations of OLE items.
richedit在streamout的时候,调用的是控件的IPersistStorage::Save,save调用了控件的Serialize我代码里面有个GIF的解析类,在Serialize的时候,我把那个类空间都释放掉(release),只write原来GIF文件的数据,数据量明显少了很多。130K多点的GIF,导出RTF数据量大小为310K多点吧。除了修改解析类,请问还有办法在Save的时候只保存自己想放进去的数据?MSDN对IPersistStorage::Save的解释为This method saves an object and any nested objects that it contains into the specified storage.
save保存了所有嵌套的对象。
我要得到Richedit里面的内容,使用richedit的streamout。为何streamout后得到的数据变得那么庞大?解决方案 »The value of nFormat must be one of the following: SF_TEXT Indicates writing text only.SF_RTF Ind
SF_TEXT Indicates writing text only.
SF_RTF Indicates writing text and formatting.
SF_RTFNOOBJS Indicates writing text and formatting, replacing OLE items with spaces.
SF_TEXTIZED Indicates writing text and formatting, with textual representations of OLE items.
而我用我自己的控件。streamout得到的数据异常庞大,快8M了
不知道这个问题和哪里有关系。
控件是最简单的MFC生成的控件,然后插入到richedit,大小有12K
你自己写的可能是连图片文件一起输出 可能就比较大了吧。
另外检查一下输出的时候 是不是连带输出了一些数组或者某些内容重复输出了。
你意思是指QQ有将图片压缩了,压缩这个我想过但没有尝试过,也只前几天才发现的这个问题,每次聊天的内容带图片的话,数据量就异常的大,我是有把整个GIF图片的buf输出去了。明天去公司修改试试。谢谢先
如果压缩的很小的话,那又不好解决了。
我是在Serialize的时候,把整个Buf输出去了
汗一个
发送图片(例如截屏)的时候 应该经过了RTF中的高压缩再发送的
-----------------------------
明天我自己压缩一下试试,估计压缩GIF也压缩不了多少了。
-------------------------
我发送的是本机屏幕的截屏。整个屏幕(1024 * 768),是将BMP转化为GIF后插到richedit里面的。转化的GIF的大小100K左右吧。
用的我的控件的话streamout后产生RTF文件好几M了。 我用同样的调用代码去调用QQ的ImageOle.Dll,streamout后也就130K多点吧。
对于文字来说当然正好,但对于图像来说,一个只有90多KB的JPEG图像,放RichTextBox中导出保存后要占据2M多空间。解决方法只一就是采用压缩。我以前用过霍夫曼压缩,能将数据减小一半左右。但这样远不能称之为理想。而且压缩率越高,解压就越慢。
最好办法是采用其它控件代替RichTextBox。但这类东西似乎没有免费的。虽然可以考虑使用WPF中的RichTextBox(具体名称记不清了)。不过同学们要为此从.net2.0转移到.net3.0 不是一朝一夕就能搞定的。或者痛下决心自己弄一个RichTextBox,不过底层代码写起来真的是很繁锁...ORZ
save保存了所有嵌套的对象。
对了,一个很奇怪的问题,在我我的CXXXXCOntrol里面有个GIF解析类的对象,
我用这个对象Load 一个gif后,输出的RTF就狂大无比?我试着把GIF解析类的对象Load注释掉。然后定义一个指针,第一没有new,第二次new了一个很大的空间,2次输出的RTF的数据量变化是一样的。
而当我有使用GIF解析类的对象的时候。并且Load了一个gif。RTF就大的不得了。按理应该没什么关系吧。
是的啊,我只write了GIF的数据。按理由应该正常的啊,搞不懂为何会变那么大