2011-12-06 3 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 color와 비교하고 websafe color가 최선의 선택인지 알아볼 필요가있다.

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

정확히 필요한 것입니다. 모든 웹 안전 색상을 하나의 배열에 넣고 배열의 각 색상과 하나씩 색상을 비교 한 다음 가장 낮은 차이를 갖는 색상을 취하십시오. 원하는 경우 예제 코드를 게시 할 수 있습니다. –

+0

각 r, g, b 값 또는 h, s, v 또는 32 비트 숫자의 차이를 취해야합니까? – Scott

+0

Dunno 무슨 일이야. – Scott

답변

4

난 HSV가에서 계산을 수행하는 가장 좋은 색 공간이 있는지 모르겠어요 또한 입방체가 아닌 원통형이므로 거리 공식 (RGB에서 제대로 작동 함)은 HSV에 대해 부적절한 결과를 생성합니다.

어쨌든 Web safe palette 그 자체는 각 구성 요소에 대해 6 가지 가능한 값 (0-5)을 가진 간단한 RGB 색상 큐브입니다. 입력 색상에서 웹 안전 색상을 파생시키기 위해 반복되는만큼 복잡한 작업을 수행 할 필요가 없습니다. 각 색상 구성 요소 (R, G, B)에 대해 적절한 웹 안전 값을 독립적으로 결정하면됩니다. 당신의 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

알았어요. 감사. 이것들은 확실히 websafe입니까? – Scott

+0

다음은 그 모습입니다. http://imgur.com/4vTPT – Scott

+0

@Scott 닫기, 정말로 닫습니다. 출력 색상 구성 요소 값은 1보다 작아야합니다 (255 대신 254 등). 수식의 실제 max_color_component_value는 얼마입니까? –

관련 문제