algorithm - 将 RGB channel 转换为整数比率

标签 algorithm language-agnostic

当我获得 RGB 格式的颜色时,如何将 channel 转换为(近似)整数比率?
示例:

(255, 0, 0)   -> (1, 0, 0)
(255, 128, 0) -> (2, 1, 0)
(128, 64, 0)  -> (2, 1, 0)
(255, 1, 0)   -> (1, 0, 0)
(3, 2, 0) -> (3, 2, 0)
(11, 5, 0) -> (11, 5, 0) or possibly (2, 1, 0)

如您所见,结果整数应尽可能小,但仍然相当精确,因此人眼无法区分色调误差。

我尝试将所有 channel 除以它们的最小值,然后对其进行舍入,但它为 (3, 2, 0) 生成了 (2, 1, 0),这不必要地不精确。

最佳答案

您可以尝试递减因子(1、2、4、8、...、256)并计算一些“舍入误差”。然后坚持误差可接受的最大因素。

-或-

只需将 RGB 转换为色调、饱和度、明度 (HSV),然后在一组有限的色调值中选择最接近的色调值。

关于algorithm - 将 RGB channel 转换为整数比率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30411893/

相关文章:

c - 低内存条件下的 LZW 压缩/解压缩

java - 在java中计算一个简单的表达式

language-agnostic - 预处理器在现代语言中过时了吗?

c - 大量 - 有缺陷的数字代码不显示结果

c - 查找数组中两个数字的目标和

algorithm - Dijkstra 算法修改

language-agnostic - 最重要的结构化软件设计原则是什么?

架构,大量方法 vs 长参数列表

language-agnostic - 3D游戏编程

language-agnostic - 我曾经读到静态类非常困难,甚至无法调试。这是真的吗?为什么?