本文来源:https://mp.weixin.qq.com/s/frlWhkNuKFiJnx_DpD698Q
若有版权问题,请来信告知:13951431913#139.com 或在右方提交评论。

当首次从Kindle设备切换到国产Android电子书时,发现屏幕上的漫画呈现为色阶状态,色彩过渡生硬,导致阅读漫画的效果很差,尤其是遇到彩色图片时更是出现明显的块状感。
当时就在思考是否能够借鉴Kindle Linux系统的技术,实现全屏256级抖动效果。
去年曾尝试通过Xposed框架来实现这一功能(基于已开源的eink256项目)。
不过这种方法仅适用于普通图片查看软件,无法兼容Kindle App这类专用电子书应用,而且还需要设备获取root权限。
现在我已经成功实现了这一功能,无需root权限,并且可以适配所有Android电子书设备。
采用C++实现的Floyd-Steinberg算法,效果相当出色,几乎感觉不到处理痕迹。
简单解释一下,Floyd-Steinberg算法是一种经典的误差扩散抖动技术,主要作用是在减少图像色彩数量时尽可能保留原始图像的视觉细节。其核心原理是逐个像素扫描图像,为每个像素在目标调色板中选择最接近的颜色,然后计算原始颜色与所选颜色之间的量化误差,并将这个误差按照特定比例扩散到尚未处理的邻近像素上,具体的分配比例为:向右传递十六分之七,向左下传递十六分之三,向下传递十六分之五,向右下传递十六分之一。通过这种误差传递机制,算法能够在宏观上弥补因颜色减少造成的信息损失,使最终图像在视觉上更接近原始图像。此外,由于电子墨水屏的特性,其每个像素会与周边像素产生一定程度的融合效果,这使得经过Floyd-Steinberg算法抖动处理后的图像在墨水屏上看起来比在电脑LCD或手机OLED屏幕上更加自然,过渡更加平滑。

这是彩色的多啦A梦在黑白显示屏上展示的效果,色彩过渡非常平滑,不再出现明显的深浅交替,也没有明显的色阶和色块现象。

这是扫描本彩色封面的处理效果展示。

原始效果对比:原本过渡平滑的256级灰度图像经过处理后变成了16级灰度。

目前的效果,过渡极为流畅,视觉效果达到极致。
让这款售价200元的PX30学习机,展现出与3000元电子书相媲美的效果。
项目已开源,访问原文可下载预编译文件,支持Android 5.0及以上版本。