试用 LVGL Pro,一套完整的工具包,助您高效构建、测试、分享和交付 UI!
LVGL
教程

在 16 位显示屏上使用抖动实现平滑图像

了解如何应用抖动技术消除 16 位显示屏上的色带,实现平滑渐变且不损失性能。

加博尔·基什-瓦莫希加博尔·基什-瓦莫希7 分钟阅读

如果你曾使用过 16 位色彩显示屏,可能遇到过平滑渐变图像中出现难看的色带。RGB565 格式可用的 65,536 种颜色通常不足以呈现细微的过渡。幸运的是,抖动通过巧妙的像素处理解决了这个问题,创造出更大色深的视觉效果。

什么是抖动?#

抖动是一种图像处理技术,通过策略性地排列像素来产生更大色深的外观。下面两张图像都只使用 256 种颜色,但右侧的抖动版本看起来明显更平滑。

未进行抖动的 8 位图像显示明显的色带
8 位(256 色)图像,未进行抖动
使用抖动的 8 位图像显示平滑渐变
8 位(256 色)图像,使用抖动 - 在相同调色板下,抖动版本看起来好得多

为什么在嵌入式系统上使用抖动?#

在嵌入式系统上,16 位色深(RGB565)极为常见,因为它比 24 位色彩需要更少的内存和更少的数据线。对于大多数用例,质量上没有明显差异。例外是平滑的颜色渐变,16 位显示屏根本没有足够的颜色来创建无缝过渡。

抖动在编译时解决了这个问题,运行时性能影响为零。您在开发期间转换一次图像,它们就能在目标硬件上平滑显示。

抖动在实践中的工作原理#

概念很简单:想象仅使用黑色和白色像素创建灰色。通过交替黑白像素,人眼感知到平均灰色。使用更多白色像素获得浅灰色,更多黑色像素获得深灰色。

真实的抖动算法更复杂,在放置每个像素后跟踪量化误差,并应用各种技术来避免视觉伪影。

要深入了解抖动算法,请参阅 Tanner Helland 的 Image Dithering: Eleven Algorithms and Source Code

视觉对比#

原始 24 位图像#

具有平滑渐变的原始 24 位色彩图像
原始图像,24 位色深,具有平滑的颜色渐变

原始图像放大#

24 位图像的放大视图显示平滑像素
即使放大,渐变仍然完美

未抖动的 16 位图像#

显示色带的 16 位图像
转换为 16 位色深会产生难看的条纹,因为没有足够的颜色

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

放大的 16 位图像,带有明显的色带伪影
放大时,色带条纹清晰可见

使用抖动的 16 位图像#

外观平滑的 16 位抖动图像
16 位色深的抖动图像看起来几乎与原始图像相同。仔细检查可能会看到一些细微的条纹,但比非抖动版本好得多

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

放大的抖动 16 位图像显示噪声图案
放大的抖动图像显示轻微的噪声图案,但没有色带

如何为 RGB565 抖动图像#

将 24 位图像转换为抖动的 16 位格式的最简单方法是使用照片编辑软件。以下是两种推荐的方法:

方法 1:GIMP(推荐)#

GIMP 是一个免费的跨平台图像编辑器。

GIMP 需要一个用于 RGB565 抖动的插件。从 GIMP 注册表下载插件,如果原始链接不可用,可使用此镜像

安装步骤:

  1. dither16bit.scm 复制到 GIMP 的脚本目录(在 Linux 上:/home/user/.gimp-*/scripts)
  2. 将四个灰度调色板文件(*.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.jpg
bash

附加功能:黑白抖动#

对于单色显示屏(如高分辨率电子纸或 OLED 屏幕),您可以在 GIMP 中创建 1 位抖动图像:

  1. 打开图像
  2. 选择 Image > Mode > Indexed
  3. 选择 Use black and white color palette 作为 Colormap
  4. 选择 Floyd-Steinberg 作为 Color Dithering 方法
GIMP 对话框显示黑白抖动设置
GIMP 黑白抖动设置

以下是结果对比:

在 LVGL 中使用抖动图像#

获得抖动图像后,可以像其他图像一样在 LVGL 中使用:

  1. 将抖动的 BMP、JPG 或 PNG 上传到 LVGL 在线图像转换器
  2. 该工具从图像生成 C 数组
  3. 将生成的 C 文件复制到项目中
  4. 使用 LVGL 图像对象显示图像

结论#

抖动是一种简单而有效的技术,可在 16 位显示屏上实现平滑渐变。通过在开发期间转换图像,可以消除色带而不会产生任何运行时性能成本。无论您使用 RGB565 显示屏还是单色屏幕,抖动都可以显著提高视觉质量。

关于作者

加博尔·基什-瓦莫希
加博尔·基什-瓦莫希

LVGL 创始人

LVGL 的创始人和首席开发者,这是一个被全球数百万设备使用的开源嵌入式图形库。

认识博客背后的作者们

了解那些分享 LVGL 知识的优秀作者们

查看作者

订阅我们的通讯 不错过任何关于 LVGL 的新闻。我们每月最多发送 2 封邮件。

LVGL

LVGL 是最受欢迎的免费开源嵌入式图形库,支持任何 MCU、MPU 和显示类型,助您构建精美的用户界面。

我们还提供 UI 设计、实现和咨询等服务。

© 2026 LVGL。保留所有权利。
YouTubeGitHubLinkedIn