如果你曾使用过 16 位色彩显示屏,可能遇到过平滑渐变图像中出现难看的色带。RGB565 格式可用的 65,536 种颜色通常不足以呈现细微的过渡。幸运的是,抖动通过巧妙的像素处理解决了这个问题,创造出更大色深的视觉效果。
什么是抖动?#
抖动是一种图像处理技术,通过策略性地排列像素来产生更大色深的外观。下面两张图像都只使用 256 种颜色,但右侧的抖动版本看起来明显更平滑。


为什么在嵌入式系统上使用抖动?#
在嵌入式系统上,16 位色深(RGB565)极为常见,因为它比 24 位色彩需要更少的内存和更少的数据线。对于大多数用例,质量上没有明显差异。例外是平滑的颜色渐变,16 位显示屏根本没有足够的颜色来创建无缝过渡。
抖动在编译时解决了这个问题,运行时性能影响为零。您在开发期间转换一次图像,它们就能在目标硬件上平滑显示。
抖动在实践中的工作原理#
概念很简单:想象仅使用黑色和白色像素创建灰色。通过交替黑白像素,人眼感知到平均灰色。使用更多白色像素获得浅灰色,更多黑色像素获得深灰色。
真实的抖动算法更复杂,在放置每个像素后跟踪量化误差,并应用各种技术来避免视觉伪影。
要深入了解抖动算法,请参阅 Tanner Helland 的 Image Dithering: Eleven Algorithms and Source Code。
视觉对比#
原始 24 位图像#

原始图像放大#

未抖动的 16 位图像#

未抖动的 16 位图像(放大)#

使用抖动的 16 位图像#

使用抖动的 16 位图像(放大)#

如何为 RGB565 抖动图像#
将 24 位图像转换为抖动的 16 位格式的最简单方法是使用照片编辑软件。以下是两种推荐的方法:
方法 1:GIMP(推荐)#
GIMP 是一个免费的跨平台图像编辑器。
GIMP 需要一个用于 RGB565 抖动的插件。从 GIMP 注册表下载插件,如果原始链接不可用,可使用此镜像。
安装步骤:
- 将
dither16bit.scm复制到 GIMP 的脚本目录(在 Linux 上:/home/user/.gimp-*/scripts) - 将四个灰度调色板文件(
*.gpl)复制到 GIMP 的调色板目录(在 Linux 上:/home/user/.gimp-*/palettes)
应用抖动:
在 GIMP 中打开图像,选择 Image > Mode > Dither to RGB565,然后保存结果。
方法 2:ImageMagick(命令行)#
ImageMagick 是一个强大的命令行图像处理工具,支持多种抖动算法。
要抖动图像,运行:
convert image_in.jpg -ordered-dither o8x8,32,64,32 image_out.jpgbash附加功能:黑白抖动#
对于单色显示屏(如高分辨率电子纸或 OLED 屏幕),您可以在 GIMP 中创建 1 位抖动图像:
- 打开图像
- 选择 Image > Mode > Indexed
- 选择 Use black and white color palette 作为 Colormap
- 选择 Floyd-Steinberg 作为 Color Dithering 方法

以下是结果对比:
在 LVGL 中使用抖动图像#
获得抖动图像后,可以像其他图像一样在 LVGL 中使用:
- 将抖动的 BMP、JPG 或 PNG 上传到 LVGL 在线图像转换器
- 该工具从图像生成 C 数组
- 将生成的 C 文件复制到项目中
- 使用 LVGL 图像对象显示图像
结论#
抖动是一种简单而有效的技术,可在 16 位显示屏上实现平滑渐变。通过在开发期间转换图像,可以消除色带而不会产生任何运行时性能成本。无论您使用 RGB565 显示屏还是单色屏幕,抖动都可以显著提高视觉质量。
