パレットがある場合、最も近いウェブセーフカラーを見つける
-
28-10-2019 - |
質問
r、g、bの値を取り、それらをWebSafeカラーパレットと比較して、R、G、B値に最適な一致を見つけるにはどうすればよいですか?
これがあります:別の色への配列で最も近い色を見つけるための最良のアルゴリズムは何ですか?
しかし、私はそれが私が必要とするものだとは思わない。 R、G、BをWebSafe色と比較し、WebSafe色が最良の選択であるかどうかを確認する必要があります。
編集:削除されました
edit2:これは私がこれまでに持っているものです。
local r, g, b = HSV2RGB(h, s, v)
local dither = copy(WEB_SAFE)
local lmod
for i, v in ipairs(dither) do
local r2, g2, b2 = Color2RGBA(v)
local hh, ss, vv = RGB2HSV(r2, g2, b2)
local a = hh - h
local b = ss - s
local c = vv - v
local mod = a*a + b*b + c*c
if not lmod or mod < lmod then
lmod = mod
r, g, b = r2, g2,b2
end
end
texture:SetBackgroundColor(r, g, b)
編集3:これはどのように見えるのか?
H = 1〜360で5 ptステップ、s = 1〜100、v = 89
解決
HSVが計算を実行するのに最適なカラースペースであるかどうかはわかりません。また、キューブではなくシリンダーであるため、距離式(RGBで正常に機能する)はHSVに不適切な結果をもたらします。
いずれにせよ、 Webセーフパレット それ自体は単純なRGBカラーキューブであり、各コンポーネントに6つの可能な値(0〜5)があります。入力色からWebセーフカラーを導き出すために反復するほど複雑なことをする必要さえありません。各カラーコンポーネント(R、G、B)の適切なWebセーフ値を独立して決定するだけです。
RGBコンポーネント値の範囲は0..255の範囲であるという発疹の仮定では:
local max_color_component_value = 255
local quantum = max_color_component_value / 5
r = quantum * math.floor((r + (quantum / 2)) / quantum)
g = quantum * math.floor((g + (quantum / 2)) / quantum)
b = quantum * math.floor((b + (quantum / 2)) / quantum)
他の範囲を使用する場合は、max_color_component_valueを適切に調整します。
所属していません StackOverflow