• 用Pdg2.DLL解码PDG的境界


    作者:马健
    邮箱: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,其中的成果属于众人,任何个人都无权加以公开。

  • 相关阅读:
    OSI结构和TCP/IP模型
    将[4,3,2,5,4,3]分割成[4,3,2]、[5,4,3]两个List的算法
    Mybatis增加对象属性不增加mapper.xml的情况
    以脚本方式直接执行修改密码的passwd命令
    Raphael的鼠标over move out事件
    Raphael的Braille例子
    Raphael的set使用
    Raphael的transform用法
    Raphael的text及对齐方式
    Raphael初始化,path,circle,rect,ellipse,image
  • 原文地址:https://www.cnblogs.com/stronghorse/p/4913300.html
Copyright © 2020-2023  润新知