作者:马健
邮箱:stronghorse_mj@hotmail.com
发布:2008.08.03
一、入门级
原理:按照《用BCB实现超星格式转换为BMP格式》中说的方法调用Pdg2.DLL接口。
优点:简单明了,基本上把例子搬过来就可以了。
缺点:1、占用系统剪贴板,有时会很心烦。2、T3类PDG可能会丢插图层,或插图层色彩不正确。
应用:coolman早期的软件,及论坛其他一些人的软件,都用过这个方法。
二、剪贴板HOOK级
原理:在“入门级”的基础上,通过API
HOOK,避免对系统剪贴板的“实际”占用。这“实际”两个字,已经把方法完全说出来了。
优点:不再占用系统剪贴板,性能有所改善。
缺点:T3类PDG问题依旧。
应用:coolman中期的软件用过这个方法,其他人的似乎也用过。cheming的TC阅读插件,甚至同时使用3个控件进行后台解码,以加快速度。
三、COM级
说明:这次是第一次公开发布此方法,以前我只告诉过smartsl一次。
原理:Pdg2.DLL实现的其实是一个COM组件,按照微软的COM规范,COM组件必须实现某些接口。如果开发人员在开发COM组件时使用了现成的框架,某些接口可能自带——这点大概连CX的COM组件开发者自己都没有意识到,而知道的人可以直接通过接口,获取解码后的图像(DDB)。
优点:根本不需要与剪贴板打交道,也用不到API
HOOK,直接调用标准的COM接口即可,简单到没有任何悬念,当然前提是你要知道该调用哪个接口。
缺点:T3类图像只能得到文字层,插图层需要自己处理。
应用:Pdg2Pic
V1.00。我当年就是在用coolman的pdg2bmp&jpg&tif&pdf&txt时,对它占用系统剪贴板感到极度心烦才会想到去开发Pdg2Pic的,所以一开始就绕过了剪贴板。
三、API
HOOK级
说明:这次是第一次公开发布此方法,以前我只告诉过某人一次,并且给过他源代码,当然这是有某些前提的交换。
原理:通过API
HOOK,直接得到Pdg2.DLL解码后的DIB。
优点:上面所有方法得到的都是DDB,唯有这个可以得到DIB,速度有了很大提高,系统资源占用也有所下降。
缺点:T3类图像只能得到文字层,插图层需要自己处理。
应用:Pdg2Pic
V1.01中作为后备手段。
基于Pdg2.DLL的所有方法的共同特点:
1、容错能力太差,只要原始PDG文件有点问题,CPU占用100%、非正常退出那是家常便饭。
2、即使文件正常,只要翻页,内存占用就会增加,尤其是DjVu格式的PDG。CX程序员调用djvulibre的方法极度幼稚,对任何一个合格的VC程序员来说都是一个笑话,但是CX居然用了一个djvulibre就敢声称自己掌握了“小波图像压缩”,真是不服不行。
3、从接口上看,用Pdg2.DLL解码应该是可以解已知帐号信息(如本人帐号)的6xH,不过托各路高手的福,虽然我本人是CX的VIP,但是6xH对我来说一直是无缘的存在,所以也没有兴趣深入研究。
因此,从V1.01起,Pdg2Pic就不再使用Pdg2.DLL,其中的成果属于众人,任何个人都无权加以公开。