2011-12-06 4 views
2

r、g、b値をどのようにしてウェブセーフカラーパレットと比較して、r、g、b値に最適なものを見つけるか? What is the best algorithm for finding the closest color in an array to another color?私はパレットを持っている場合に最も近いウェブセーフカラーを見つける

しかし、私はそれは私が必要なものだとは思わない:

あり、この一つです。私は、r、g、bをwebsafeカラーと比較し、websafeカラーが最良の選択であるかどうかを調べるだけです。

EDIT1:これは私がこれまで持っているものです :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: これはどのように見えるのですか?

http://imgur.com/LwFGQ

時間= 1 5つのPTの段階で360を通じて、S = 1〜100、V = 89

+1

これはまさに必要なものです。すべてのWebセーフカラーを1つの配列に配置し、配列内の各色と1つずつ色を比較し、最も差が小さい色を取得します。私はあなたが好きなら、サンプルコードを投稿することができます。 –

+0

各r、g、b値、またはh、s、v、または32ビット数の違いを取る必要はありますか? – Scott

+0

何が起きているの? – Scott

答えて

4

私は、HSVがで計算を実行するための最良の色空間であることをわかりません - それは円柱でも立方体でもないので、距離式(RGBで正常に動作する)はHSVに不適切な結果をもたらすでしょう。

いずれの場合でも、Web safe paletteはそれ自体がシンプルな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を調整します。

+0

それはそれを得た。ありがとう。これらは間違いなくウェブセーフですか? – Scott

+0

これは次のようなものです。 http://imgur.com/4vTPT – Scott

+0

@Scott閉じる、本当に閉じる。あなたの出力カラーコンポーネントの値は、必要な値より1つ少ないです(255の代わりに254など)。数式の実際のmax_color_component_valueは何ですか? –

関連する問題