ComicEnhancer Pro：Enhance scaned comics picture by brightness, contrast, gamma correction, resize, sharpen and blur. 作者：马健 邮箱：stronghorse_mj@hotmail.com 主页：老马的原创空间 功能简介 使用说明 密技曝光 一、256 vs. 24-bit 二、Decode vs.encode 三、IJG vs. IJL 四、ComicEnhancer vs. Photoshop 五、JPEG，BMP，GIF, TIFF and PNG 六、bilinear，bicubic and nearest 七、JPEG 2000 鸣谢 附录 版本更新记录 ## 功能简介 多年来我一直是个热心的漫画读者，但现在漫画书的购置成本和储藏成本越来越高，远远超出了我的心理承受能力，所以我只敢收集电子版的漫画。但是由于种种原因，扫描的漫画常常因为纸张薄、纸质差而带有斑点、纸色、背透（纸张背面的图像透过来），或者因为扫描参数设置不当而造成图像灰暗、模糊，看起来实在是太累。 其实这些缺点均可通过数字图像处理技术进行修正，比如要消除最常见的背透现象，只要一个简单的曲线调节即可。但是一张、一张地去编辑图像文件又太累：我曾经花了两天时间一页一页地校正我喜欢的一部漫画，校正完后我的眼睛看什么都带灰影，最终还是下定决心 开发了这个软件： (1).能够一次调节指定目录下所有图像文件的亮度、对比度、Gammar校正等，以增强图像质量； (2).能够旋转、调节图像尺寸，进行锐化、柔化，真彩转黑白，调节JPEG图像压缩比等； (3).调整好的参数设置能够保存、调入，便于重用； (4).具有全尺寸的“所见即所得”的效果预览，可以单页调节/保存，也可以成批调节/保存； (5).在源图像文件相同、参数设置相同的情况下，转换效果是可重复的。因此可以建立一种新的漫画共享模式：如果某位漫友对网上的某部漫画效果不满意，用ComicEnhancer Pro进行了调整，则他可以将调整所用参数发表在BBS上，其他漫友可以套用这些参数对同一部漫画进行增强，从而大家都能得到满意的漫画。 (6).能够用减色的方式，将通常JPG格式的黑白漫画转成16级、8级、4级灰度PNG格式，减少文件长度。这个一般只对质量很好的漫画有用，正好用来对付尺寸越来越大的“完美版”漫画。 在后来的开发过程中，为了让预览功能更好用，我又陆续增加了一些图像浏览功能（参见打开图像文件后的“查看”菜单）。以现在的浏览功能来看，ComicEnhancer Pro差不多可以代替普通图像浏览器，用来看漫画了，并且和其它图像浏览器相比具有独到的特点： 1. 可以随时根据漫画质量和当前显示器设置对图像进行增强，保证最佳视觉效果，同时图像文件本身保持不变。 2. 可以在一个主窗口下同时浏览多个文件，或同一文件的多个备份，便于比较。不过每打开一个图像窗口均需消耗大量内存，因此在低于128MB内存的机器上不提倡同时打开4个以上的窗口。基本上当你听到硬盘狂响不止时就是物理内存不足了。 3. 除了通常的用键盘翻页（逗号/句号或加号/减号）、用键盘移动大图（四个箭头键），和用鼠标拖动大图外，还支持鼠标翻页（双击左键下翻，按住左键单击右键则上翻）。 目前能够输入的图像格式包括JPG、UFO、GIF、BMP、PNG、TIFF、WMF、JPEG 2000（JP2/J2K/JPC）、WEBP，能够输出的图像格式包括JPG和BMP、PNG、TIFF、JP2。其中JPG能输出24位真彩和256级灰度格式；PNG、BMP、TIFF能够输出24位真彩、256色 、128色、64色、32色、16色、8色、4色、2色和256级、128级、64级、32级、16级、8级、4级灰度及纯黑白格式。TIFF单色图像采用CCITTFAX4（G4）压缩，其它采用LZW压缩。JPEG 2000支持24位真彩和256灰度图像，并可通过设置压缩率定量控制输出文件的大小。 如果有本程序不能识别的非标准图像文件，请用ComicsViewer或ACDSee转换成标准JPG或PNG格式，再调用本程序。 注意： ComicEnhancer Pro是一个“友情软件”（Friendware），用户在承诺不用于商业目的，也不对文件及其附件进行任何更改的条件下，不需要为使用该软件支付任何费用，最多是在动漫讨论区看到我发帖子灌水时，进去捧个人场，作为友情回报，或者在年节时发个email问声好（所以叫“友情软件”）。我承诺绝不在程序中暗藏任何商业广告、木马，但不承诺为使用ComicEnahcer Pro的后果承担任何责任。如果您需要将它用于商业目的，或加入您的网站，请与我联系，否则保留追究一切责任的权利。如果您能提供更好的数字图像处理算法或源码，或发现程序的bug，欢迎与我联系。 ## 使用说明 启动 ComicEnhancer Pro后，显示出主框架窗口，并在下方显示参数调节对话框。用户一般先选“文件->打开”菜单，调入几个图像文件，然后对参数进行试调节（参数项含义见后），直至满意为止。在打开某个文件后，用页面浏览键键（参见“查看->页面浏览”菜单项提示）可以在同一个窗口中打开同级目录下的其它文件。文件的浏览顺序通过“查看->文件显示顺序”菜单项进行设置。这样可以在更大的范围内检查参数的作用效果。图像较大时可以用箭头键移动，也可以按住鼠标左键拖动。双击鼠标左键可以向后翻页，按住左键单击右键则向前翻页。 在参数确定后，选择“文件->成批转换”菜单，即可调出原ComicEnhancer界面，对成批图像文件进行处理： 在“需增强的漫画”框中，点击“选择”按钮，选择源文件（需处理的漫画文件）所在目录，再从“源文件”列表中选择源文件类型。点击“查看文件”按钮可以启动图像浏览器并打开目录下的第一个源文件。如果“包括子目录”选项被选中，处理时连源目录所带子目录下的文件一起处理，否则只处理源目录下的文件。 在“增强后的漫画”框中，点击“选择”按钮，选择目标文件（处理后生成的新文件）的存放目录，再从“新文件扩展名”列表中选择目标文件类型。点击“查看文件”按钮可以启动图像浏览器并打开目录下的第一个目标文件。源文件和目标文件如果是同一个目录，处理前会提示用户是否要覆盖源文件。 如有必要，调节“选项”框中的各个选项（含义见后）。 如有必要，可以点“选择转换”按钮，先选择几个源文件转换一下，看一下实际转换后的效果。 所有参数配置好后，点击右上方的“全部转换”按钮开始图像处理。处理过程中底部的进度条会显示当前处理进度，处理完后弹出对话框显示需处理的文件数、成功处理的文件数。如果有文件不能成功处理（不能读或不能写），会提示用户打开处理过程的记录文件，从中可以知道具体哪些文件不能读或写。不能读的原因可能是源文件损坏，或不是标准的文件格式，可以用ACDSee转换一下再重试。不能写的原因可能是因为目标目录不允许写，或磁盘空间不够。 在点击“全部转换”按钮开始处理后，“全部转换”按钮变成“停止转换”按钮，其它控件变灰。用户点击“停止转换”按钮可以中断正在进行的处理。 如果对调整效果比较满意，点击“保存”按钮可以将参数存盘。点击“调入”按钮可以调入以前存盘的参数。点击“恢复”按钮则将参数设置为默认值。如果需要删除某次保存的参数值，点击“调入”按钮，在打开“参数管理”对话框后，选择欲删除的设置，点“删除”按钮。 提示： 源文件目录最好和目标文件目录不一样，避免覆盖，并且可以反复运行。 由于各选项参数的设置与具体图像质量有关，因此如果一次需要处理的图像很多，最好先从中选择几张进行试调节，参数调试好后再对所有文件进行最终调节，以节省运行时间。 从1.24版开始，原来的“转换”按钮更改为“全部转换”，即对源目录下的所有文件进行转换，适用于参数已确定的情况；新增“选择转换”按钮，允许对选定的（多个）文件进行转换，适用于参数尝试、调整阶段。 参数调节步骤： 如果彩色页面明显发白，或因为纸张陈旧而发黄，可以试着选择自动色阶或自动对比度。 在无偏色的情况下，首选是曲线功能，此功能大致相当于Photoshop的Curve功能，但是内置了几种调节模式。一般先根据图像情况选择其中的某种模式，再对调节点进行调节。 如果对曲线功能调节效果不满意，则选择“原画面保持不变”模式，改用其它调节方式。一般画面背景透光严重时，可以增加画面对比度和亮度。但是增加亮度会造成画面整体发白，这时可以将亮度恢复成100％，改为调节高亮度。 如果增加高亮度后对文字、边线造成损伤，则增加高亮值，减小亮度。 如果增加高亮值后在背景上出现较多麻点，减小高亮值，增加亮度。 如果调节后图像整体发白，或文字、边线较模糊、黯淡，增加Gamma校正值。 如果画面模糊，可以选择锐化选项。如果图像边线、文字比较单薄，有间断，或图像放大后锯齿比较严重，可选择柔化操作。不过这两项操作比较费时间，如果机器不好的话会感觉速度明显变慢。 如有必要，调节图像缩放比例。注意如果选择放大图像，则每一步操作均需要更多的时间。如果机器够快，建议选择bicubic，嫌太慢可以选bilinear，只有在不得已的情况下才选择nearest。 如果看的是黑白漫画，最好将色彩选项置为“黑白漫画”，而不是缺省的“保持原样”，这样可以减轻纸张发黄、发红等造成的背景杂乱。 如果希望生成的JPG文件更小一点，可以减小JPG质量；如果生成的是JPEG 2000（JP2），则可调节JP2压缩率。 对于黑白漫画，色彩选项选为“256级灰度”可以使生成的文件小一些；如果画面非常干净，也可以选择“16级灰度”、“8级灰度”或“4级灰度”，并选择按PNG格式输出，可以获取最佳压缩比。对于纯文字页面，选“单色”，并选择按TIFF格式输出，可以获取最佳压缩比。如果需要处理的漫画中包含彩色封面，可以勾选“不处理彩色图像文件”选项，以避免损失。 如果浏览的是纯文字页面（扫描电子书），并且笔画较细影响阅读，可以选择“加粗”、“柔化”选项进行加粗。 处理过程中可以显示直方图，查看是否处理过头。 各Option项的含义： 1. 亮度 范围0～200，100表示亮度不变，小于100图像变暗，大于100图像变亮。增加亮度一般可以消除斑点、背透、纸张颜色、印刷时油墨不匀造成的黑印，但是较淡的文字、边线可能会更看不清。 2. 对比度 范围0～200，100表示图像不变，小于100图像变灰，大于100图像更加黑白分明，有助于解决因单纯增加亮度而造成的文字、边线变淡，因此常和增加亮度同用。 3. 高亮度 范围0～200，100表示高亮区（图像空白区）亮度不变，小于100高亮区图像变暗，大于100高亮区图像变亮。这可是本软件最独特的地方，能够在因源图像文件中的文字、边线较淡而很难再增加总体亮度的情况下，仅增加图像空白区的亮度，从而能有效清除背景上的斑点、纸色、背透等等，在ACDSee 3.1的Photo Enhancer和Microsoft的“照片编辑器97”中可都找不到类似的功能。所谓“高亮区”，其实是由旁边的“高亮值”定义的。在使用本功能去除背景上的纸色、背透时，如果增加高亮值，可以保护较淡的文字、边线，但是去除效果就会下降；如果减少高亮值，去除效果就会更明显，但可能会误伤教淡的文字、边线。 4. 高亮值 定义高亮度区加亮功能的“高亮区”：当象素的亮度值（0～255）大于等于该值时，象素处于高良区，执行加亮操作，否则保持不变。一般来讲，增加此值时，可以保护较淡的文字、边线，但是去除底纹效果就会下降；如果减少此值，去除效果就会更明显，但可能会误伤较淡的文字、边线。 5. 曲线 大致相当于Photoshop的Curve功能，专业术语称“对比度延展”。此功能可以综合调节画面对比度和亮度，并且设置了几种典型模式，应该是首选的调节手段，宜勤加练习。 6. Gamma校正 范围0～200，100表示图像不变，小于100图像变白，大于100图像变黑，有助于解决因增加亮度、对比度、高亮度等而造成的画面发白，并能使模糊、黯淡的文字、边线变得更坚实，当然如果图面上有麻点也会变得更显眼。 7. 尺寸缩放 范围0～200，100表示图像尺寸不变，小于100输出图像变小，但图像可能会更清晰（致密）；大于100输出图像变大，但可能会更模糊。放大的时候有三种选择，如果机器够快，建议选择bicubic，嫌bicubic太慢可以选bilinear，只有在不得已的情况下才选择nearest。 8. JPG质量 范围0～100，此值越低表示存盘后的JPG图像质量越差，但文件长度更小；此值越高表示存盘后的质量越好，但文件长度更大。 9. JP2压缩 即JP2文件的压缩率，范围0～100，可以用此值定量控制生成的JP2文件的大小： 最终JP2文件字节数 ≈ 图像像素宽度×图像像素高度×JP2压缩率÷100 当然天下没有白吃的午餐，文件越小，质量越差。不过即使压缩率为100%，也不是无损压缩。 10. 切边 如果“填白”选项没有选中，则所选区域外的部分将被裁剪掉，否则用白色填充而不裁剪。 11. 锐化 对于墨色教浓、文字笔画粘连的图像，此选项可以使文字更清晰。换言之，如果文字、边线本来就细，经此功能处理后就更雪上加霜了。 12. 柔化 能够使锐利的边缘、锯齿变柔和。但如果原来图像就模糊，用此功能后大概就该出重影了。如果“色彩”选择了“单色”，也可以用此功能平滑笔画，其效果较“加粗”柔和。 13. 色彩 如果选择“256级灰度”选项，处理后的文件按256级灰度保存，对于黑白漫画可以减少文件长度，但对于彩色漫画就太可惜了。如果选择“24位真彩”， 则按24位真彩色格式存盘，对黑白漫画来说又太浪费。如果选择“保持原样”，则原来是256级灰度或24位真彩的，存盘后还是256级灰度或24位真彩，适用于那些封面为彩色，内容为黑白的漫画。如果画面非常干净，也可以选择“16级灰度”、“8级灰度”或“4级灰度”，并选择按PNG格式输出，可以获取最佳压缩比。对于纯文字页面，选“单色”，并选择按TIFF格式输出，可以获取最佳压缩比。 14. 自动色阶/自动对比度 对于彩色图像来说，有时会由于扫描亮度设置失当而造成画面发白，或由于纸张陈旧而造成画面偏黄。对于这种偏色画面，通常可以通过色阶调整进行校正。 本软件的“自动色阶”功能与PhotoShop的同名功能在算法上一致，但是在参数上与PhotoShop的缺省参数不一样，效果要更强烈一些。通过修改PhotoShop的缺省参数，可以达到相同的效果。 PhotoShop的“色阶”功能虽然强大，但是色阶是基于直方图的变换，而每一张图像的直方图都可能不同，因此对于PhotoShop来说可以用“色阶”慢慢调节每一张图像，但对于本软件这种用一套参数处理一系列图片的情况，“色阶”显然不适用，只能用“自动色阶”。 自动色阶功能由于是对三原色直方图分别进行校正，因此校正后可能会出现偏色，如偏黄的校正后偏蓝。如果不希望出现偏色，可以选择“自动对比度”，自动对比度针对灰度直方图进行调整，因此不会出现偏色。 15. 旋转 包括左、右旋转90度，及180度旋转。 16. 加粗 如果浏览的是纯文字页面（扫描电子书），并且笔画较细以至于影响阅读，可以选择“加粗”选项进行加粗。对于彩色画面，此选项会加深颜色。对于灰度图像，此选项可能会出现小灰斑。 17. 不处理彩色图像文件 只有在色彩选项不是“24位真彩”或“保持原样”时才允许选择此选项。如果需要处理的漫画中包含彩色封面，可以勾选此选项，以避免将24位真彩封面转成灰度或 其他图像，造成损失。 18. 红蓝互换 将RGB中的R通道与B通道互换，通常用于浏览红外照片等特殊图像。 19. 反白 对于纯黑白图像来说，就是将“白底黑字”变成“黑底白字”，这样处理后再转为PDF，在手持设备上阅读时看起来会更顺眼一些。 其他图像“反白”处理后，看起来可能会有一点怪异，所以最好先对图像进行筛选，再使用此功能。 2 0. 复制文件日期、时间 如果选中，则结果文件与源文件具有相同的文件日期、时间；否则结果文件的日期、时间为当前系统日期、时间。 21. DPI 指定结果文件的DPI，缺省为300 DPI。如果结果文件类型选jp2，此参数无效。如果按照设置的DPI转换后又后悔了，可以用“批量设置DPI”功能批量更改结果文件的DPI。 图像增强参数的作用顺序： 本软件依照下列先后顺序处理每一张图片：转灰度、切边、红蓝互换、反白、放大、锐化、高亮度、自动色阶/自动对比度、曲线调节、亮度、对比度、Gamma校正、柔化、加粗、缩小、填白、旋转、减色 、存盘。 如果需要批量处理的顺序与上述顺序不同，可以采用多遍处理的方法，即第一遍处理后，再进行第二遍处理，中间结果存储为无损压缩的PNG格式，以免损失。 如果奇偶页需要处理的参数不同，可以将奇偶页复制到不同的文件夹，然后再处理。下面这个批处理命令将奇数页文件（文件名以1、3、5、7、9结尾）移动到odd文件夹： for %%a in (1 3 5 7 9) do move *%%a.* odd 批量设置DPI： 目前“批量设置DPI”功能允许批量设置BMP、PNG、JPG、TIFF文件的DPI，但有一些限制： BMP：这个比较简单，直接更改BITMAPINFOHEADER结构体的biXPelsPerMeter、biYPelsPerMeter字段，因此速度飞快，也不存在兼容性问题。 PNG：这个就没这么简单了，因为不是所有PNG文件都有phys段，所以采用了很笨的方法：把PNG文件解码，设置DPI后重新编码、存盘。所以速度会慢一些，文件也可能会出现变化。好在PNG格式是无损压缩，无论解码、编码多少次都不会对画面造成影响。 JPEG：为了简单起见，只对JFIF格式的APP0段（FF E0）中X_density、Y_density、density_unit字段进行更改。不支持EXIF段中的DPI描述，对于没有APP0段的JPG文件也无能为力。 TIFF：只支持单页TIFF，多页TIFF只设置第一页的DPI。不支持采用JPEG压缩的TIFF文件。另外某些扫描或传真图像X、Y向DPI可能不同，用此功能强制设置为相同，在某些浏览器下可能会出现变形。 总之，如果需要设置的BMP、PNG、JPEG、TIFF文件都是用本软件生成的，用“批量设置DPI”功能更改DPI是没啥问题，用其他软件生成的就要看运气了。另外此功能仅仅是改变了DPI值，对图像的像素尺寸没有任何影响。 ## 密技曝光 一、256 vs. 24-bit 不论是扫描漫画还是其他图像，只用纯黑、纯白二色的几乎没有，黑白漫画一般用256级灰度，少数用16级、8级、4级灰度；彩色漫画和照片一般用24位真彩色表示，少数可以用256色。 在进行本软件所支持的任何一项图像处理的时候，都需要对图像的每一个象素的R、G、B值进行四则运算，再将运算结果保存为象素的R、G、B值。低于24位色的所有图像，如16位色、8位（256）色、4位（16）色、二位（4）色，读/写象素R、G、B值时均需频繁进行移位运算和逻辑运算，而24位色以上的图像，由于每个象素的R、G、B值分别用DIB位流中的一个字节表示，只需移动字节指针即可进行访问，因此速度优化十分明显。 考虑到速度的优化和代码的简化，本程序每读入一幅图像，均先转换为24位真彩色，以后所有的图像处理运算均针对24位DIB位流进行，存盘的时候根据“色彩”选项设定JPEG、PNG、BMP、TIFF、JP2数据结构，将结果存为灰度或24位真彩。 二、Decode vs.encode 在编写本程序的时候，我首先考虑的就是图像文件的载入。在网络上搜寻了一大圈，最后发现讨论图像解码（decode，读取）的文章、代码和库函数，要比讨论编码（encode，存盘）的多得多。 其实如果要求的仅仅是将图像文件显示到屏幕，根本不需要任何第三方的代码或组件，调用Windows本身的API就足够了：用OleLoadPicture函数调入图像（支持BMP、JGP、GIF、WMF等），再调用IPicture::Render函数即能显示图像，在Code Project上有不只一个VC++实例。 如果调用Render时使用的是自己创建的内存DC，显示完后在内存DC中就生成了一幅DDB（device dependent bitmap，设备相关位图），理论上讲这时候就可以进行图像处理了，但实际上还存在问题： 对DDB的象素进行操作保证慢得让你想跳楼，只能通过API调用将DDB转换为DIB（device independent bitmap，设备无关位图）才能忍受，即在内存中同时有两份内存拷贝，增加无谓的内存消耗。 内存DC、DDB均是与当前显示设备相兼容的，其所能表示的颜色数、内存消耗也与当前显示设置相关，如果当前显示器设定为256色，则原来24位真彩的JPG载入后也缩水成256色；如果当前显示器设置为32位色，虽然颜色不会缩水，但内存消耗又上去了。而且谁知道用户运行程序的时候显示器会设成什么样？ DDB转DIB除消耗内存外，还需要消耗时间，图像尺寸大、颜色设置高时更明显。 由于以上种种原因，我虽然开始时采用了OleLoadPicture＋Render的方法，但最后还是放弃了。 Windows API虽然提供了图像解码功能，但是没有提供图像编码功能，因此在存盘的时候，一般还需要第三方工具的支持，不然就需要苦读《图像格式大全》，再熬夜写代码了。对于JPG格式，现在最有名也最流行的第三方工具有IJG和IJL两个。 三、IJG vs. IJL IJG的全称是Independent JPEG Group（独立JPEG小组），该组织以C语言源代码的形式提供应用广泛、完全免费的JPEG解码/编码函数库，编译后生成二进制格式的LIB文件，可以连接到其他编译型语言的程序中。其实对于Windows程序员来说，这个函数库最难的地方就是对编译选项的设置（Unix无此问题），一旦设置完成，编译成功，差不多就可以卖钱了。有些开发商就是将对IJG的调用封装一下，生成DLL或OCX，就开始堂而皇之地收费。由于IJG生成的代码简洁干净，无需任何DLL或OCX，很多收费的图像浏览器、编辑器等也直接或间接地基于IJG，包括Windows自身的相关API。另外在IJG的源代码中还包含对GIF、BMP、PPM、TGA、RLE文件解码/编码的实例代码，因此也有人说IJG提供的JPEG库支持这些图像格式，其实这些代码仅供IJG测试用，一般生成的LIB文件中并不包括这部分代码，如果想支持这些格式还需要在此源码基础上花功夫。 IJG最大的好处是稳定、兼容性强，毕竟经受了多年的考验。缺点是速度太慢，碰到大文件会很难受。 IJL的全称是Intel JPEG Library，是由Intel公司提供的JEPG解码/编码库，专门针对Intel处理器进行了彻底的优化，因此在Win-tel环境下速度一流。这个工具最大的特点就是简单，一共只有六个函数（ijlInit、ijlFree、ijlRead、ijlWrite、ijlGetLibVersion、ijlErrorStr），而且随机文档中附有完整的VC++实例，因此对于VC程序员来说不用费什么脑子就可以对JPEG应用自如。 IJL有两个主要的版本：1.5版和2.0版。1.5版是最后一个免费版本的IJL，以后的版本都是收费版。而2.0则是IJL的最后一个版本，以后IJL被Intel Integrated Performance Primitives （IPP）v6.1中新推出的UIC（Unified Image Codec）所取代。 免费的IJL v1.5流传很广，但存在下列问题： 内存漏洞。这个用IJL的DLL版看不出，要用Static Lib版才能看出来：每打开一个文件，VC会报告72字节（3通道JPG）或24字节（单通道JPG）的漏洞。网上有文章说明如何用内联汇编打补丁来解决这个问题。 不支持EXIF中指定的旋转参数。这个问题不大，可以在解码后自己旋转，但需要自己再去解码EXIF。 手册上说不支持CMYK色彩空间，但自带的JPGView例子支持部分CMYK的解码，另外一些解码后色彩不正确。这个也可以修正，同样需要自己 进行处理。 容错性太差。某些数据异常的文件用IJG能解码，用IJL则不行。有源代码的话很容易修正，没有源代码就难了。 IJL v2.0从其他途径可以搞到，包括部分源代码。但是从我试用的情况看，除修正了内存漏洞外，其他问题依旧存在。不过毕竟有一些源代码，所以可以自己动手修正。另外虽然IJL v2.0的编译环境要求是VC++ 2002以上，自己建个project在VC6下编译也没有问题，花几分钟修正一下就好。 从速度上来说，在目前的主流CPU上IJL v2.0要比v1.5快，毕竟可以采用最新的处理器指令。因此从v2.53开始，本软件不再采用IJG，改用IJL v2.0。 在IPP的sample中，也给出了用IPP改造后的IJG版本，速度比原版IJG要快，但还是没有IJL快，而且兼容性很差，有些用原版IJG编码没有问题的文件，用IPP版IJG编码出来就是花的。 四、ComicEnhancer vs. Photoshop 其实我个人认为，Photoshop的漫画增强效果还是不错的，但在分享转换参数方面还存在一些不足，所以我才会编这个程序。 从总体上说，ComicEnhancer模仿的是Photoshop的Batch Action功能，但支持的图像格式、图像处理方法和效果、效率可能不如Photoshop，毕竟是在业余时间里 鼓捣出来的东西。 Batch Action看得见的参数不多，建立时一般是对图像操作进行录制，因此如果在BBS上撒个帖子：“我用Photoshop进行了××操作，增强了××漫画”，别人大概也是有听没有用。而ComicEnhancer的所有参数均是可见的，结果也是可重复的，因此如果在BBS上撒个帖子：“我用ComicEnhancer增强了××漫画，所用参数为××”，大家都可以受益。 Photoshop里我最欣赏的就是Curve功能，通过用样条函数表示的非线性映射，能够同时调整图像的亮度和对比度。但是这个功能的可重复性实在是太小。ComicEnhancer的所有操作都是可重复的。 最要命的一点，Photoshop实在是太大、太全了，会用它处理漫画的人好象不太多，而且自从开始收集电子版漫画后，我对Photoshop在硬盘上所占据的100多兆空间一直耿耿于怀。 五、JPEG，BMP，GIF, TIFF and PNG 如果说JPEG是当今网上最流行的图像格式，大概不会有人反对。但由于JPEG是有损压缩，在提供较小文件长度的同时，JPEG格式也具有以下缺点： JPEG主要针对的是“自然图像”，即色彩比较丰富、颜色过渡自然的图像，如普通彩色照片等。而动画、漫画一般是“非自然图像”，即颜色跳跃比较大，并且有文字等信息，这样在线条、文字等边缘部分就会产生细小的碎片（高频噪声），在压缩比较大时尤其明显。这对狂热追求画质一族来说实在是个遗憾。 虽然某些人宣称“JPEG还原时无失真”，但这不过是一句广告用语罢了。由于JPEG的有损压缩特性，实际上每压缩一次，都会损失一些图像信息，因此JPEG并不适合保存图像处理的中间结果。如果对以JPEG格式发行的图片进行编辑，再保存成JPEG格式，每保存一次都会造成损失。 由于这些原因，网上有人开始尝试用无损压缩格式保存动漫图片。常见的无损压缩格式有BMP、GIF、PNG和TIFF等： 1、BMP BMP格式的特点是操作简单，基本上所有的工具都支持它（Photoshop之流不支持16位色BMP），如果想自己开发图像处理程序的话，读 、写BMP文件的源代码也随处可见。但BMP图像基本上是把象素信息直接写到文件里，不进行压缩，或 仅采用简单的RLE压缩，因此用BMP格式保存的图像文件一般都比其它格式的文件大得多，导致几乎没有谁会在网上发行BMP格式的动漫图片。我唯一见过的一次是有人以单色BMP格式发行了一套赤松健的《永远的圣诞老人》，长度比质量系数65％的256级灰度JEPG还小，不过单色BMP不是黑就是白，没有任何过渡，看起来实在是…… 2、GIF GIF大概称得上是目前网上最流行的无损压缩图像格式。我看到的第一套以GIF格式发行的漫画是英文版《乱马》，其图像之细腻绝对不是JPEG能够比拟的，而且由于采用16级灰度，图像尺寸也不大。支持16级灰度GIF格式的软件并不多，估计是用ACDSEE的Photo Enhancer（现在叫Foto Canvas）一张、一张转出来的。后来陆续又见过一些以GIF格式发行的港版漫画，虽然图像都不错，不过文件尺寸上就差远了－－全是256色GIF，估计都是用ACDSEE批量转出来的。不过GIF也有一些问题： GIF压缩算法的核心－－Lempel-Ziv-Welch (LZW)算法是有专利权的，专利权归Unisys公司所有。开发解码程序也就算了，如果开发编码程序，就算开发的是freeware，也需要缴纳专利费，否则是违法行为。 GIF表现灰度和调色板图像还不错，表现24位真彩图像的时候，效果不是很理想。ACDSEE在把其它格式的图像批量转成GIF的时候，干脆就把所有彩色图像都转成256级调色板GIF。 有鉴于此，至少我是不会在我开发的软件里支持GIF编码的，解码则直接调用Windows自身的接口。 3、PNG 对于Unisys向支持GIF格式的freeware收费的行为，网络界当然不会没有反对的声音。其中一些反对者聚集起来，提出了新的PNG格式（听起来象不象DivX和Xvid的故事？）。PNG的压缩算法采用公开的ZIP压缩算法，不仅压缩率比LZW高 （从统计学上说如此），而且不需要支付专利费用，连压缩、解压源代码都有专门的zlib组织免费提供。 与GIF相比，PNG格式不仅文件长度更小，而且在色彩方面支持得更好，差不多达到BMP的水平。尤其是动漫图片常用的24位真彩和256级、16级、8级和4级灰度。 因此，整个“动漫DIY系列”将全面支持PNG格式。 4、TIFF TIFF可以说是一种包罗万象的图像格式，内部允许使用多种图像压缩格式，包括BMP使用的RLE、PNG使用的zip、GIF使用的lzw、JPG使用的jpeg压缩算法等。从我使用的结果来看，如果使用与其它图像格式相同的压缩算法，TIFF文件并没有什么优势。但是在压缩黑白（单色）图像时，TIFF提供的CCITT G4压缩算法比zip、lzw、RLE等具有非常明显的优势，因此ComicsEnhancer Pro在保存TIFF格式时，单色图像均采用CCITT G4压缩，其它图像采用LZW压缩。 六、bilinear，bicubic and nearest 图像放大历来是个让人头疼的问题，原因就在于原集与相集的一对多关系，即在分辨率不变的情况下，原图像上的一个点放大后，将成为新图像上的多个点。这些点如果与原图像上的点颜色完全相同（即nearest算法），则图像会出现明显的锯齿，所以好的放大算法一般是按照某种公式计算新图像上每一个点的颜色，使新图像上的点与周围点的颜色过渡平滑一些、自然一些，以消除锯齿。 这种计算公式通常采用插值公式，而常用的插值公式有线性（linear）插值、立方（cubic）插值等。由于2D图像的插值需要沿x、y两个方向进行，因此加上代表“双向”一词的前缀bi，就成了通称的bilinear、bicubic。 线性插值公式比较简单，运算速度快，但是线性插值算法只根据原图像上相邻的两个点来计算新图像上的点，插值误差随步长的增加而很快增加，因此一般认为不宜用于二倍以上的放大。 立方（三次样条）插值根据原图像上相邻的四个点来计算新图像上的点，因此可以从更大范围内保证放大图像的平滑性，一般认为可以用于2倍以上的放大。很多商业图像编辑、浏览软件都采用了三次插值，包括Photoshop、ACDSEE 5.0等。但三次插值的运算要比线性插值更复杂，速度约为后者的一半。 ComicEnhancer Pro的放大算法除了bilinear、bicubic外，还有nearest（最近点）算法。这种算法的思想是这样的：遍历新图像的每一个点，把这个点的坐标按缩放比例反向折算成原图像的坐标，当然折算后的坐标值可能是个浮点数，比如说（1.2，2.3），原图像上离这个点“最近”的点是（1，2），则将（1，2）点的颜色值作为新图像上点的值，这就是算法名称nearest的来历。 nearest算法相当于查表运算，没有任何区域运算，因此速度飞快，但是质量实在是不怎么样，我个人认为不宜用于1.5倍以上的放大。ACDSEE 5.0以前的版本的zoom菜单用的就是这种放大算法。 七、JPEG 2000 现在虽然JPEG 2000已经成为标准，但似乎标准对代码实现定义不足，导致现在出现了一些不兼容的JPEG 2000代码。以C语言开源项目为例，目前比较有名的有kakadusoftware的kakadu、Michael D. Adams的JasPer、openjpeg组织提供的LibOpenJPEG。从我测试的结果看，似乎JasPer编码的兼容性更好，而openjpeg解码的兼容性更强。说得更白一点，用JasPer编码的JP2文件直接插入PDF文件不会出错，而openjpeg编码的会；从Acrobat生成的PDF文件中抽取JPEG 2000文件，用openjpeg能够解开，而JasPer解不开。kakadu的解码速度、兼容性无与伦比，但是某些图像解码后的效果不如openjpeg。 另外IPP也提供了自己的JPEG 2000编解码器，从我测试的结果看，时空效率略逊于kakadu，而且我实在是被IPP的其他codec吓怕了，根本不敢实际应用。 在综合考虑各方因素后，本软件采用kakadu（32位用MMX优化，64位用纯C++）实现JPEG 2000编解码。 在JPEG 2000标准中，定义了JPEG 2000文件（以JP2为文件扩展名），和JPEG 2000编码流（code stream，以J2k、JPC为文件扩展名）。JP2包含的信息更完全，因此本软件编码时一律编码成JP2文件。解码则支持JP2、J2k和JPC。 另外虽然kakadu支持调色板图像的编解码，但是从我测试的情况看，其他软件如ACDSEE、Acrobat等对调色板JPEG 2000的支持并不一定与kakadu一致，因此封闭了调色板JPEG 2000的编码功能，JP2文件只能保存256级灰度和24位真彩图像，但是解码支持调色板JP2文件，解码效果与kakadu的一致。 从我使用的情况看，JPEG 2000的效果不见得比JPEG强多少，但是编码消耗的时间要多得多，实在不很划算。 ## 鸣谢 本软件的JPEG解码/编码采用了Intel发布的IJL（Intel JPEG Library），但进行了修正；PNG文件的支持采用了libpng组织提供的libpng源代码（zlib采用了ASM版），TIFF文件的支持采用了libtiff组织提供的libtiff源代码，GIF文件支持采用了Davide Pizzolato的CxImage，Jpeg 2000支持采用了kakadusoftware提供的kakadu源代码，webp采用了Google的libwebp。 放大处理的bicubic、nearest算法实现参考了Davide Pizzolato的CxImage，但是替换了插值公式，运算速度也优化到了可以接受的程度，减色算法则直接COPY过来用，在此表示感谢。 ## 附录 版本更新记录 v3.10 新增功能：支持webp格式的解码。 新增功能：增加“自定义工具栏”功能，可以对工具栏按钮、文字、图标等进行调整，方便使用大屏幕的用户。 功能增强：换了一套真彩工具栏图标，支持大、中、小三种尺寸。 功能增强：在打开32位bmp文件时，强制把背景置为白色。 功能增强：“色彩”中扩展了128色、64色、32色、16色、8色、4色、2色、128级灰度、64级灰度、32级灰度。 v3.09 错误修正：某些CMYK色彩空间的JPG文件解码不正确。 v3.08 错误修正：某些PNG解码不正确。 v3.07 功能增强：更改文件名排序方式，“按文件名字母顺序”时基本与Windows资源管理器顺序相同。 功能增强：更改多文件选择对话框的实现方式，减小不必要的内存占用。 错误修正：某些alpha通道透明PNG文件解码异常。 错误修正：某些CMYK色彩空间的JPG文件解码异常。 v3.06 新增功能：“切边”对话框中支持用快捷键翻页。 新增功能：在状态条上显示图像像素尺寸。 功能增强：支持某些非标准BMP图像。 错误修正：如果选择了“自动缩小”，“保存”或“另存为”存出来的图像只有当前可见区大小。 v3.05 新增功能：增加直方图显示，便于在处理时查看处理是否过头。 v3.04 错误修正：不关闭批量处理对话框，直接退出会出错。 v3.03 错误修正：某些图像减色为单色时会出错退出。 v3.02 继续消除单色图像右侧的黑色竖线。 v3.01 错误修正：某些单色图像右侧可能出现黑色竖线。 v3.00 新增功能：在“参数”中新增“JP2压缩”项，用于定量控制生成的JPEG 2000文件大小，详见使用说明。 新增功能：在“参数”中增加“反白”选项，以支持手持阅读，详见使用说明。 新增功能：在“批量转换”对话框中增加“查看日志”按钮，便于查看错误日志。 新增功能：批量处理界面支持文件夹、文件拖放，允许编辑源文件夹、目标文件夹。 功能增强：允许通过拖拽文件夹打开文件，以前只允许拖拽文件。 功能增强：优化“减色”算法，以加快速度。 功能增强：JPEG 2000编码器不再采用jasper，改用kakadu，以提高兼容性和编码效率。 错误修正：某些JPEG 2000调色板图像解码不准确。 错误修正：英文版下有时“曲线”会出错退出。 更改英文版界面字体。 改为发行Unicode版，取消ANSI版的发行。 对使用说明进行了修订。 v2.57 新增功能：支持从资源管理器中拖拽文件。 功能增强：修正“单色”算法。 功能修正：对JPG解码前先做填白处理，避免因为解码失败而出现随机颜色。 错误修正：某些JPG中的EXIF旋转标识识别错误。 v2.56 新增功能：在“批量转换”界面中，可以指定目标文件的DPI，缺省为300DPI，详见使用说明。 新增功能：“批量设置DPI”，可以批量设置BMP、PNG、JPG、TIFF文件的DPI，详见使用说明。 错误修正：IJL不能正确解码某些含JFXX段的JPG文件。 v2.55 zlib、IJG代码恢复原始版本，与IPP版说再见，以避免层出不穷的兼容性问题。 v2.54 功能增强：对含无效字符的文件路径能够给出提示。 错误修正：切边预览窗口显示的文件不正确。 v2.53 功能增强：JPEG 2000解码改用Kakadu，以加快速度。 功能增强：JPEG编解码改用经过修正的IJL 2.0，以加快速度。 功能增强：zlib、IJG代码改用IPP优化版，以加快速度。 功能增强：在批量处理界面中，选择源文件夹后，自动设置目标文件夹与源文件夹一致。 错误修正：在批量处理时，如果元文件夹与目标文件夹相同，可能会对新生成的结果文件再处理。 错误修正：在Win7下，“打开文件”对话框如果选择了“预览”，初始文件无预览。 v2.52 新增功能：“图像增强参数”中增加“红蓝互换”选项，用于处理红外照片等特殊图像。 错误修正：黑白图像选“自动色阶”后变色。 错误修正：某些Old-style JPEG压缩的TIFF文件显示有错。 v2.51 新增功能：“图像增强参数”中增加“加粗”选项，用于加粗较细的文字笔画。 功能修正：在bicubic算法中改用锐化参数，并设置bicubic为缺省放大算法。 错误修正：批量处理时，如果“色彩”选择“黑白漫画”，“新文件扩展名”选BMP，则彩色图像不会被转换成灰度图像。 错误修正：某些CMYK色彩空间的JPG文件显示不正确。 错误修正：缩图时，最下或最上一条扫描线可能不正确。 v2.50 新增功能：图像旋转，包括左旋、右旋90度，及180度旋转。 新增功能：在批量转换对话框中，选择目标文件夹时可以新建文件夹。 功能调整：状态条上的窗口切换控件更改成UnicornViewer所用控件。 v2.49 新增功能：“图像增强参数”中增加“自动色阶/自动对比度”选项，对发白、发黄的彩色页面有效果。 新增功能：在“切边”中，增加“填白”选项。如果该选项被选中，则本该被裁剪的部分不再裁剪，而是用白色填充。 功能修正：引入UnicornViewer的“切边”界面，不再按像素裁切，而是按百分比裁切。 功能修正：“高亮度”处理顺序提前，便于去掉水印。 错误修正：打开某些JPEG 2000图像时出错退出。 错误修正：选择“切边”之后再选择“自动缩小”，画面显示比例不正确。 错误修正：在选择“自动缩小”后，调节参数时图像会自动恢复原大小。 v2.48 错误修正：某些CMYK色彩空间的JPG文件打开后色彩显示不正常。 错误修正：大比例缩图时可能会出错退出。 v2.47 功能增强：LibOpenJPEG升级至v1.3，jpeg 2000解码速度有所提高。 功能增强：“柔化”级别从2级增加至5级，方便在“单色”模式下去斑。 错误修正：不能打开某些采用JPEG压缩的TIFF文件。 v2.46 新增功能：批量处理时新增“复制文件日期、时间”选项，如果选中，则结果文件与源文件具有相同的文件日期、时间。 功能修正：透明背景PNG的背景色强制设置为白色。 功能修正：对于纯粹由数字构成的文件名，即使在“文件显示顺序”中选择了“按文件名字母顺序”（缺省），也会按照数字的实际值进行排序，避免10.jpg排到2.jpg前面。 v2.45 错误修正：某些CMYK色彩空间的JPG文件显示不正确。 错误修正：大比例缩图时，会出现亮线。 v2.44 功能增强：改写镜像、翻转、旋转90度的代码，以提高速度。 错误修正：某些CMYK色彩空间的JPG文件显示不正确。 v2.43 新增功能：为主窗口添加LOGO。 新增功能：鼠标双击主窗口空白区（黑色背景区），相当于点击“文件->打开”菜单。 错误修正：某些图像减色至4级灰度时会出错。 v2.42 功能修正：另存为TIFF时，除黑白图像采用CCITT G4压缩外，其他所有图像均采用LZW压缩，以获取最大兼容性。 功能修正：透明背景GIF的背景色强制设置为白色，不再用GIF本身的背景色。 v2.41 错误修正：缩小显示图像时可能会出错退出。 v2.40 新增功能：支持按照JPEG格式中的EXIF信息，自动对图像进行旋转。某些数码相机喜欢这个。 新增功能：“文件显示顺序”增加“按文件末尾数字”排序选项。 错误修正：碰到某些破损GIF文件会出错退出。 v2.39 错误修正：在放大某些图像时，会出错退出。 v2.38 兼容某些JPEG压缩的TIFF文件。 v2.37 功能增强：在选择“8级灰度”、“4级灰度”时，背景色强制置为白色。 v2.36 功能增强：支持某些特殊格式的TIFF文件。 错误修正：如果图像文件正在被某些软件打开，则不能正常读取该文件。 v 2.35 错误修正：某些大图缩小时，会出错退出。 v2.34 功能增强：支持某些特殊格式的TIFF文件。 v2.33 功能增强：支持CMYK色彩空间的JPG图像。 v2.32 功能增强：支持某些柯达扫描仪生成的OJPEG TIFF图像。 v2.31 新增功能：支持jpeg 2000，包括jp2、j2k和jpc文件。 错误修正：在打开某些CCITT G4压缩的TIFF图像时，会出现缓冲区溢出错误。 v 2.30 功能增强：支持上一版本未能支持的非标准OJPEG格式TIFF文件，怪文件还真是层出不穷。 功能增强：对于长、宽DPI不相等的TIFF文件，能够自动调整长宽比。 v 2.29 1、功能增强：继续加强对非标准OJPEG格式TIFF文件的支持，但是有些文件还是无法解码，只能保证软件不会异常退出。 2、功能增强：允许文件存储为TIFF格式，并且支持全部颜色选项（上一版本只能存储单色TIFF）。单色图像采用CCITTFAX4（G4）压缩，真彩图像采用JPEG压缩，其它图像采用LZW压缩。 v 2.28 新增功能：模仿Excel，在状态条上显示当前窗口列表。 新增功能：在状态条上显示当前文件序号/当前文件夹中的文件数。 新增功能：工具条。其实最初的版本是有的，后来由于与某些Windows 95环境冲突，所以删了，现在重新恢复。 新增功能：在“色彩”选项中，可以设定将24位真彩色减色为256色。 新增功能：减色后的图像允许存为BMP、TIFF格式。 功能增强：减色功能升级到CxImage 5.99c所带的源代码。 功能增强：在批量减色时，如果选择了“不处理彩色图像文件”，则根据图像的实际内容而不是文件格式判断图像是否为彩色图像。 功能增强：zlib升级为1.2.3，以避免潜在的安全风险。 功能增强：除了按文件扩展名外，还按文件头识别图像文件格式。 功能增强：GIF解码器换成了cximage提供的解码器，虽然速度差了点，不过容错能力比原来的强。 功能增强：在“文件->打开”对话框中，可以选择是否打开预览功能（缺省不打开）。 功能增强：对libtiff源代码进行修正，以更好地支持OJPEG格式的TIFF文件。由于历史的和技术的原因，国内很多扫描外包公司提供的彩色TIFF影像文件都是非标准的OJPEG格式（没有核心技术的悲哀！）。由于地址错位，Photoshop、ACDSee等正宗图像处理软件都会将这些文件当作已损坏的文件加以拒绝，俺实在是被逼无奈，才会捏着鼻子去支持这些垃圾格式。 v2.27 功能增强：改进“打开文件”对话框的图像预览效果。 功能增强：加快用箭头键移动图像的速度，代价是图像移动不是那么平滑。 错误修正：在1280*1024分辨率下，用鼠标拖动很大的图像时，图像会乱跑。 错误修正：在“参数”对话框中，先选中“Jpg质量”后再切换到“缩放”，会出现“缩放”项中的最大值变为100（滑动条处于最右端）。感谢樊云军的指正。 v2.26 1、功能增强：减色功能升级到CxImage 5.80所带的源代码。 2、功能增强：缩小图像时，允许指定缩小算法。以前缩小时一律使用bilinear算法。 3、功能增强：在将彩色图像转换成灰度图像时，灰度计算公式从G = (R + G + B) / 3改成G = (54 * R + 183 * G + 19 * B) / 256，与libpng采用的公式相同。 4、功能增强：读取BMP文件时，能够处理BI_RLE8、BI_RLE4、BI_BITFIELDS格式的图像。 5、功能增强：“打开文件”对话框升级到ComicsViewer 1.20带图像预览的对话框。 6、功能增强：“打开目录”对话框升级到ComicsViewer的树型目录对话框。 7、功能增强：libtiff升级到v3.7.1，libpng升级到v1.2.8，zlib升级到v1.2.2。并且zlib使用的是ASM版（其实只有两个文件是ASM的）。虽然没有确凿的测试数据，不过我相信png文件的编/解码速度会快一点。 8、功能增强：简体中文版对话框的字体全部修改成宋体9。 v2.25 新增功能：缩放的时候，可以选择放大算法：bilinear、bicubic和nearest，分别适应于中档、高档、低档机，当然放大后的效果也不一样。 v2.24 功能修正：png格式的压缩率从Z_BEST_COMPRESSION改成Z_DEFAULT_COMPRESSION，牺牲了一点文件长度，但是速度加快许多。 v2.23 错误修正：批量处理时源文件不能包含TIFF、WMF。 v2.22 新增功能：支持读取TIFF、WMF格式的文件，但是不能输出这两种格式。 功能修正：透明GIF文件的背景色改为窗口背景色，而不是黑色，以符合习惯。 v2.21 功能修正：色彩的缺省选项从“黑白漫画”修改为“保持原样”。 v2.20 1、新增功能：可以将彩色和256级灰度图像降低到16级、8级、4级灰度或单色。 2、新增功能：支持16级、8级、4级灰度和单色效果预览。 3、新增功能：PNG格式支持16级、8级、4级灰度和单色图像的输出。 v2.19 1、新增功能：支持PNG格式。读取的时候可以读取所有色彩模式的PNG，输出的时候只能输出24位真彩和256级灰度的PNG。 2、新增功能：切边。可以批量处理，切边参数可以保存。 3、功能修正：页面浏览的快捷键改为与ComicsViewer相同。 v2.18 为了更好地处理动画截图，对图像增强进行如下调整： a. 锐化操作在操作流中的顺序提前。 b. 锐化参数增加到9级。 v2.17 增强线程安全性。 v2.16 同步发行英文版。 v2.15 除JPG文件外，输入格式增加对UFO、GIF、BMP的支持，输出格式增加对BMP的支持。现在本程序也可以当作文件格式转换工具使用了。 v2.14 将“参数”对话框的标签由一行改为两行，避免用箭头按钮进行切换。 v2.13 1. 对“批量转换”界面进行了调整。 2. 窗口背景色改为黑色。 3. 增加了错误记录文件访问的鲁棒性。 v2.12 1. 新增“自动播放”功能：从当前文件开始，顺序显示同一目录下的后续文件。文件显示顺序同浏览顺序。自动播放间隔通过“自动播放设置”功能进行设置。 2. 对用箭头键操纵的大图像滚动算法进行了改进：采用多媒体专用的高精度定时器（精度到1ms），对时间进行精确定位，保证在高、低速机器上均能得到平滑的滚动效果。测试平台包括：在赛扬300A/128MB上跑的Windows Me、Windows NT Server 4.06，在PIII 1G/256MB上跑的Windows 98 SE2、Windows 2000 Server。 v2.11 1. 新增鼠标浏览功能：除了普通的按住左键拖动大图外，还支持鼠标翻页（双击左键下翻，按住左键单击右键则上翻）。 2. 增加文件监测功能：当目录中的文件发生变化（添加、删除、更名）时，自动刷新文件缓冲，翻页时就能浏览到更新后的文件。但是继续保留2.10版加上去的“刷新目录”菜单，原因很简单：为了保证在不同的平台上都能运行，程序中使用了通用监测函数，而没有采用NT专用函数，这样如果打开的是网路驱动器上的文件，自动监测功能可能不太可靠，还要手动刷新。浏览本机图像则不存在这种问题。 v2.10 继续从ComicsViewer引进idea和s/c： 1. 仿照Photoshop的Curve功能，增加了“曲线”（专业术语应该叫“对比度延展”）功能。不过可能是因为我在曲线生成方面偷了点懒，效果不如Photoshop明显，但也有长处：(1).参数化曲线，结果可重复；(2).预设多种模式，便于初学者上手，也便于学习Photoshop的Curve功能。 2. 仿照IE中的“后退”和“前进”功能，增加了“前一页”和“后一页”功能。这样在浏览时就不用担心无意中碰到Home或End键了：只要敲一下退格键（BackSpace）或选“查看->前一页”菜单即可返回原页面。 3. 增加“全屏浏览”和“自动缩小到窗口大小”功能。其中“全屏浏览”的效果看起来有点土，但MFC只能做到这一步，我又懒得用DirectX，所以就这样了。 4. 增加“刷新目录”功能。如果当前窗口所显示文件的目录中有文件加入或删除，选择此功能后就能正确地用PgDn和PgUp键浏览变化后的文件。其实对用户来讲这个功能应该是多余的，好的程序应该能够自动检测到目录所发生的变化。请期待以后的升级吧。 5. 增加关键性的条件判断，在读取图像文件失败后不会再出现保护性错误。 以现在的浏览功能来看，ComicEnhancer Pro已经差不多可以用来看漫画了，并且和其它图像浏览器相比具有独到的特点： 1. 可以随时根据漫画质量和当前显示器设置对图像进行增强，保证最佳视觉效果，同时图像文件本身保持不变。 2. 可以在一个主窗口下同时浏览多个文件，或同一文件的多个备份，便于比较。不过每打开一个图像窗口均需消耗大量内存，因此在低于128MB内存的机器上不提倡同时打开4个以上的窗口。基本上当你听到硬盘狂响不止时就是物理内存不足了。 v2.02 从ComicsViewer引进了新的idea和s/c： 1. 增加了基本图像浏览功能：打开某个文件后，用PgDn、PgUp、Home、End键可以在同一个窗口中打开同级目录下的其它文件。文件的浏览顺序通过“查看->文件显示顺序”菜单项进行设置。 2. 经高人指点，对mask滤波算法内核进行了优化。受其影响，放大、锐化、柔化操作速度均有提高。 3. 对用鼠标、键盘操作的图像滚动进行了更改，使滚动过程更平滑。 4. 修正了一个bug：参数栏中的“尺寸缩放”不等于100，“以上参数仅适用于当前窗口”项也未选中，但是新打开的窗口仍然按100％显示。 5. 为“参数”栏增加了快捷键：Ctrl+P和Ctrl+A，以方便左撇子和右撇子。 v2.01 修正了v2.0中的一个bug：在进行“成批转换”时，只有“属性”对话框中的参数起作用，“批量漫画增强”（原ComicEnhancer界面）中的参数不起作用。 v2.0 推出了众望所归的“预览”功能，而且是： 1. 全尺寸“所见即所得”的预览效果； 2. 真正MDI的预览界面，可以同时预览多个文件，或打开同一文件的多个窗口（窗口上限受内存、CPU速度等限制，建议不超过10个）； 3. 预览时可以指定参数的作用范围，可以单页调节/保存，也可以成批调节/保存； 4. 通过预览确定参数后，选择“文件->成批转换”菜单即可调出原ComicEnhancer界面，对成批图像文件进行处理。 由于用户界面、功能等改动较大，因此软件版本号升级为整数，软件名称也由ComicEnhancer更改为ComicEnhancer Pro。 v1.24 原来的“转换”按钮更改为“全部转换”，即对源目录下的所有文件进行转换，适用于参数已确定的情况；新增“选择转换”按钮，允许对选定的（多个）文件进行转换，适用于参数尝试、调整阶段。 v1.23b 为了与Mpeg2Jpeg相配合，对放大时的平滑算法进行了调整。此调整对黑白漫画几乎没有什么影响。 如果图像放大后在边线、文字附近出现碎片，可以通过“柔化”进行过滤，也可以通过增加亮度、对比度加以消除，不过亮度上去后可能需要进行Gamma校正，否则会太刺眼。 v1.23a (1).原有“锐化”功能的效果太显著了，增加两档较弱的效果，便于实用。 (2).将“黑白漫画”选项由复选项改成列表项，更加直观、方便，选项也增加到彩色漫画、黑白漫画、保持原样三个。 (3).增加目录选择对话框的尺寸，方便浏览。 v1.22 (1).对亮度、高亮度、对比度、Gamma校正算法进行了最彻底的优化，速度接近理论极限值，大概用于实时处理都够了。 (2).由于Gamma校正的查表由二维表改为一维表，表格所占内存减少为原来的1/80，“输入值圆整为5的倍数”这项内部限制也被取消。 (3).全部重写了JPEG访问接口。以前的访问接口其实是copy来的，经过了层层封装，使用起来很方便，可是中间环节太多，影响效率。新的接口去掉了所有不必要的中间环节，直接对IJG的JPEGLIB进行操作，缓冲切换也减至最小。但是毕竟是文件操作，还有复杂的编码/解码过程，所以速度改进有限。不过光是其中的错误处理一项就让我头昏了一下午。 (4).对尺寸缩放、锐化、柔化进行了微小改进，速度提高不很明显。这些功能的核心算法是各种高/低通滤波，能到这种程度已经让我偷笑了。幸好这三个功能也不常用。 v1.21 将Gamma校正的算法由硬碰硬的幂运算改成了查表，速度终于优化到可以用于大尺寸图像的地步。 v1.20 (1).应公众要求，破例将界面由英文转为中文，如果使用的不是简体中文Windows，需要外挂NJStar。 (2).增加了一批图像新功能：Gamma校正、尺寸缩放、锐化、柔化。 (3).增加了设置管理功能：保存、调入、恢复。 (4).增加停止功能：在开始转换后，用户如果愿意可以中断当前正在进行的转换。 (5).Logo图像由静态变成动态。当时手头一时找不到合适的动画制作软件，临时现编了一个的说。 (6).更正了一个错误：如果目标目录在源目录里的话，会一直目录套目录转换下去不会停。 (7).去掉了两个装饰性的选项：Auto Level（自动平衡）和Edge Enhance（边缘增强）。 v1.1 增加对Highlight的阀值的调节功能，缺省阀值从原来的170涨到190，加强对较淡的边线、文字的保护。 v1.02 将Slider的Pagesize从10降到5，方便懒人使用。 v1.01 对Brightness、Highlight的运行速度进行了优化 v1.0 提供Brightness、Contrast、Highlight、JPEG Quiality、Gray Scale、Edge Enhance功能，支持JPG文件格式。