zoukankan      html  css  js  c++  java
  • 连续翻页浏览器面临的共同问题

    作者:马健
    邮箱:stronghorse_mj@hotmail.com
    发布:2008.04.26

    说明:此文以我在readfree上发的几个帖子为基础。这些帖子随着UnicornViewer的升级而陆续发布,基本上记录了UnicornViewer的一段升级历史。


    目前发现连续翻页浏览器都面临几个同样的问题:

    1、内存占用

    与一次显示一页的浏览软件(如ComicsViewer)不同,连续翻页浏览器用于需要连续滚动,必须对前、后页进行缓存,否则翻页将不连贯。缓存如果管理不善,将可能导致内存占用持续增加。
    Acrobat 8:怀疑有内存漏洞,浏览扫描版PDF时,随着翻页,内存占用会持续增加。不过Acrobat 8比Acrobat 7强一点:在我的512 MB内存机器上翻一本1000多页的扫描电子书,从头翻到尾,7居然把机器翻死了,8还勉强活着。
    Foxit Reader 2.2:内存占用比较稳定。
    WinDjView 5:在VC下运行debug版,会报告大量内存漏洞(我测试的时候,因为漏洞太多,以至于VC的错误报告自动截止了),不过这些漏洞基本上是从libdjvu带过来的 。
    CajViewer 7:有一点轻微的内存漏洞(反复打开、关闭文档可以看出),不过翻页的时候内存占用比较稳定。
    UnicornViewer:v0.10以前的版本在内存占用方面实在是臭名昭著,不过从v0.10开始脱胎换骨了,至少在浏览清晰版PDG的时候不会有什么内存漏洞。

    2、同一文档在多个窗口中同时显示

    有时候需要将一份文档前、后对照着看,这时最土的办法是启动两个浏览器,分别打开同一个文档,对照着看,好一点则是在同一个浏览器中,选择“窗口->新建窗口”,然后将两个窗口并排显示,以便比较。
    Acrobat 8:支持,和Word 2003差不多。
    Foxit Reader 2.2:支持,但是两个窗口只能上下排列,不能左右并列,看起来有点别扭。
    WinDjView、CajViewer:不支持,所以我说他们的MDI界面只是披了一层皮,骨子里还是SDI。
    UnicornViewer:早期版本就支持,不过一直不是很稳定。v0.10进行结构大调整后,运行很稳定,并且支持上下并列(平铺)、左右并列(纵铺)。

    3、背景图案

    我个人认为浏览器能够设置背景色已经足够了,但是国内某些用户可能被SSREADER惯坏了,非要能够设置背景图案才觉得爽。
    这个功能要做过才知道有多难,总之Acrobat 8、Foxit Reader 2.2、WinDjView、CajViewer都不支持,UnicornViewer从v0.10开始支持,不过只能从内嵌的8个 背景图案中选。

    4、图像缩放

    在用连续翻页浏览器浏览的时候,很少有人会按图像的原始像素大小显示,多半都会选择某个缩放选项,因此图像缩放是浏览器必须面对的一个问题。
    图像缩放里隐藏着一对永恒的矛盾:速度和效果,要想兼顾这二者是一件很难的事情。缩放速度直接影响到页面显示速度、翻页速度,而缩放效果则是缩放后人眼所看到的页面显示效果。
    Acrobat 8:缩放速度、缩放效果比较均衡;以前版本的速度似乎有点问题,所以打开图版PDF时感觉有点痛苦。
    Foxit Reader 2.2:早期版本有一个毛病:如果PDF页面是背景透明的黑白页面,则缩放后的显示效果会很差,不过后来的版本已经修正了这个错误。
    WinDjView 5:缺省使用libdjvu的缩放功能,放大不错,缩小到一定程度后文字有点模糊,所以另外准备了一套高精度缩小算法。不过这个算法似乎速度有点问题(见WinDjView设置界面中的提示信息),所以缺省不开启,即使通过手工设置开启,也只有在缩小至50%以下时才会真正启用。
    CAJViewer 7:缩小不错,放大不行。
    UnicornViewer:以前贪图方便,用的是cximage的缩放代码,所以效果不错,速度不行。从v0.10开始,逐渐从ComicsViewer引入成熟代码,与cximage相结合。发展到v0.11,应该说速度和效果都比较均衡了。
    其实图像缩放算法都是公开的:放大常用的有nearest、linear、cubic。其中nearest效果最差,但速度最快,所以UnicornViewer和PdgThumbViewer都用它来生成缩略图。cubic效果最好,但是运算量太大,没几个人愿用。linear在速度和效果上比较均衡,所以运用广泛。缩小常用的就是super-sampling。这些算法在Intel发行的Intel Image Processing Library Reference Manual附录B部分有详细解释,图文并茂、通俗易懂,有兴趣的不妨找来看看。
    理论上说,如果采用相同的算法,各家软件的缩放效果应该是相同的。但为了加快速度,各家都采用独门秘技,在编码实现时对经典算法进行了力所能及的简化、转化(如浮点转定点等),最终导致各家在速度、效果方面产生了差异。

    5、缩略图支持

    缩略图这个东西,大多数时候没用,要用的时候还真不能没有。
    但是天下从来没有白吃的午餐,显示缩略图也是要付出代价的:需要CPU来解码图像、生成缩略图,解码过程还可能与主界面的解码产生冲突;生成的缩略图需要在内存里保存。因此对时间和空间都有要求。
    正因为如此,不少软件对缩略图都采取“能躲就躲”的政策,不过知难而上的也不是没有:
    Acrobat 8:缺省情况下不显示缩略图,需要用户手工开启。而且缩略图只有在需要时才生成,不会在后台自动生成全部。
    Foxit Reader 2.2:不支持缩略图,PDF带目录则显示目录,无目录则用页码代替目录。
    Microsoft Office Document Imaging:缺省显示缩略图,而且生成缩略图的速度是我见过最快的,M$果然有人才啊!
    WinDjView 5:缺省显示缩略图,而且缺省在后台悄悄生成所有页面的缩略图。经常看到有人抱怨打开大型DjVu的时候感觉像死机,其实多半是缩略图惹的祸,把那个缺省选项关掉就好多了。另外WinDjView不支持同一文档在多个窗口中同时显示,这 也与对缩略图的支持有关:这种支持限制了WinDjView的程序结构。
    CAJViewer 7:不支持缩略图。
    UnicornViewer:PDG缺省不显示缩略图,用目录代替;即使显示,缺省也是显示多少生成多少,不敢在后台全部生成。TIFF开始是向MODI学习,缺省显示缩略图;从v0.11开始,改为向Foxit Reader、CAJViewer学习,缺省用页码代替缩略图。

    6、并排左翻

    “并排左翻”的含义是:并排显示两页时,前页在右,后页在左,即按竖排书籍的排版方式显示。
    Acrobat 8:可以通过在“首选项”的“国际”里设置“从右至左”来支持并排左翻。
    Foxit Reader 2.2、WinDjView 5、CAJViewer 7均不支持此种显示方式。Foxit Reader、WinDjView情有可原,毕竟在西方书籍里没有这种翻页方式,但是CAJViewer这个“国产”软件也不支持,就有点不应该了,还是说知网的人都不看竖排书?
    当年开发ComicsViewer时我就意识到这个功能的重要性(没办法,日本漫画都是这样翻的),但是由于种种原因,UnicornViewer直到v0.12才开始支持。可以预料,随着显示器尺寸越来越大,并排显示必将成为主流的阅读模式,而“并排左翻”对大陆用户来说可能只有读古籍才会用到,但对港台用户来说,却是日常必不可少的功能。

    7、裁边

    在连续显示时,页面上、下的页边空白如果很大,无疑会影响阅读;而对扫描书来说,由于种种原因导致页面边缘扫出黑边,看起来就更心烦。这些都可以通过“裁边”加以解决。
    Acrobat 8支持裁边,但却是永久裁边,因此裁边后如果后悔了,不能恢复到原先的状态,所以我一直不敢用。Foxit Reader 2.2、WinDjView 5、CAJViewer 7均不支持此功能。
    裁边是ComicsViewer的基本功能之一,UnicornViewer从v0.12开始引入,不过在ComicsViewer中是按照像素进行裁边,有时候会有点问题,所以在UnicornViewer中改成按百分比裁边。不论是ComicsViewer还是UnicornViewer,都只在显示的时候进行裁边,对原始图像文件不会有任何影响,因此可以放心使用。

  • 相关阅读:
    Firemonkey 控件设定字型属性及颜色
    ListView 使用 LiveBindings 显示超过 200 条记录
    Firemonkey ListView 获取项目右方「>」(Accessory) 事件
    XE7 Update 1 选 iOS 8.1 SDK 发布 iPhone 3GS 实机测试
    Firemonkey Bitmap 设定像素颜色 Pixel
    Firemonkey 移动平台 Form 显示使用 ShowModal 范例
    XE7 提交 App(iOS 8)提示「does not contain the correct beta entitlement」问题修复
    XE7 Android 中使用 MessageDlg 范例
    导出 XE6 预设 Android Style (*.style) 档案
    修正 Memo 設定為 ReadOnly 後, 無法有複製的功能
  • 原文地址:https://www.cnblogs.com/stronghorse/p/4913370.html
Copyright © 2011-2022 走看看