【发布时间】:2015-08-05 08:57:42
【问题描述】:
当我获得 RGB 格式的颜色时,如何将通道转换为(近似的)整数比率?
示例:
(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)
如您所见,结果整数应尽可能小,但仍相当精确,因此人眼无法区分色调误差。
我尝试将所有通道除以它们的最小值,然后对其进行四舍五入,但它会为 (3, 2, 0) 生成 (2, 1, 0),这不必要地不精确。
【问题讨论】:
-
我认为您将需要一个通道,通过某种算法将其声明为足够重要以成为单位比率。例如 (255, 128, 0) 以某种方式将 128 声明为单位比 1,然后其余通道将除以 128,然后将其四舍五入。我们只需要计算“单位比率的通道”算法,如果没有任何可行的渠道作为单位比率(例如您的情况(3,2,1),那么它只会返回(3,2,1 ). 只是我的想法,希望对您有所帮助:)
-
您在这里的最终目标是什么?这解决了什么问题?如果你想节省内存,这不会节省太多。如果您想表征色调,您可能应该将 RGB 转换为 HSV 颜色空间。
-
@David 在游戏中混合灯光对象以产生某种颜色的灯光。只有红、蓝、绿灯。我不想创建 255 个红灯,因为这不会影响色调。
-
我知道这是一个老问题,但我实际上认为您正在寻找 alpha 混合。 stackoverflow.com/questions/2780/…
标签: algorithm language-agnostic