#converting #srgb #rgb #up #routines #graphics #color

无需 std rgb565

包含处理 RGB565 以及将其转换为 RGB 和 sRGB 的例程

4 个版本

0.1.3 2022年1月26日
0.1.2 2022年1月26日
0.1.1 2022年1月25日
0.1.0 2022年1月25日

9#srgb

Download history 8/week @ 2024-04-15 4/week @ 2024-04-22 77/week @ 2024-04-29 10/week @ 2024-05-06 7/week @ 2024-05-13 7/week @ 2024-05-20 18/week @ 2024-05-27 17/week @ 2024-06-03 11/week @ 2024-06-10 16/week @ 2024-06-17 8/week @ 2024-06-24 270/week @ 2024-07-22

每月下载量 271
libremarkable 中使用

MIT 许可证

27KB
327

rgb565

rgb565 提供了用于 RGB565 像素格式的反序列化、序列化和转换例程,该格式仅使用 16 位存储颜色信息。红色通道获得 5 位,绿色 6 位,蓝色再次获得 5 位。RGB565 格式常用于嵌入式设备和微控制器,例如只有较低程度颜色复制的电子墨水显示屏。

rgb565 包含了开箱即用的方法,用于转换到和从许多顺序和字节序,每个例程都经过手动验证、自动验证,并在使用 RGB565 格式的物理设备上进行测试。

查找表

rgb565 具有可选功能,可以使用 查找表 在没有图形协处理器的嵌入式设备上获得巨大的速度提升(高达 20%!)。特别是 sRGB 从查找表中获益良多,因为您通常需要浮点数学来正确逼近伽玛曲线。

您可以使用 Cargo 功能控制查找表的使用

  • swap_components_lut 以加速加载和存储到 BGR 值
  • l5_to_l8_lut 以加速将到 8 位 RGB 红色/蓝色通道的转换
  • l6_to_l8_lut 以加速将到 8 位 RGB 绿色通道的转换
  • l5_to_s8_lut 以加速将到 8 位 sRGB 红色/蓝色通道的转换
  • l6_to_s8_lut 以加速将到 8 位 sRGB 绿色通道的转换
  • l565_to_l888_lut 以加速将 RGB565 值转换为 8 位 RGB
  • l565_to_s888_lut 以加速将 RGB565 值转换为 8 位 sRGB
  • l8_to_l5_lut 以加速从 8 位 RGB 红色/蓝色通道的转换
  • l8_to_l6_lut 以加速从 8 位 RGB 绿色通道的转换
  • s8_to_l5_lut 以加速从 8 位 sRGB 红色/蓝色通道的转换
  • s8_to_l6_lut 以加速从 8 位 sRGB 绿色通道的转换
  • l888_to_l565_lut 以加速将 8 位 RGB 值转换为 RGB565
  • s888_to_l565_lut 以加速将 8 位 sRGB 值转换为 RGB565

如果您不会使用BGR565,那么您不需要swap_components_lut。如果您将一次性转换所有三个通道,那么您不需要单独的l/s#_to_l/s#_lut功能。

除了l888_to_l565_luts888_to_l565_lut之外,所有LUT默认启用,如果您阅读这段内容,您会明白原因——所有LUT的大小如下:

  • swap_components_lut:128 KiB(131,072字节)
  • l5_to_l8_lut:32字节
  • l6_to_l8_lut:64字节
  • l5_to_s8_lut:32字节
  • l6_to_s8_lut:64字节
  • l565_to_l888_lut:192 KiB(196,608字节)
  • l565_to_s888_lut:192 KiB(196,608字节)
  • l8_to_l5_lut:256字节
  • l8_to_l6_lut:256字节
  • s8_to_l5_lut:256字节
  • s8_to_l6_lut:256字节
  • l888_to_l565_lut32 MiB33,554,432字节
  • s888_to_l565_lut32 MiB33,554,432字节

这是因为l888_to_l565_luts888_to_l565_lut都必须涵盖24位“真色彩”的1.6777216百万色空间,我认为默认添加这样的膨胀并不好。

构建

$ cargo build

测试

$ cargo test

许可证

此存储库及其包含的所有源代码均受MIT许可证的许可,主要因为我想将其包含在libremarkable中,该许可证也受MIT许可。

没有运行时依赖项