Windows 7은 작업 표시 줄 "색상 핫 트래킹"에 사용할 색상을 어떻게 계산합니까?


20

이것은 꽤 오랫동안 나를 흥미롭게했다.

누구든지 Windows 7 Aero가 현재 실행중인 앱의 작업 표시 줄 버튼에서 핫 추적 호버 하이라이트로 사용할 색상을 결정하는 데 사용하는 알고리즘을 알고 있습니까?

Windows 7 작업 표시 줄 호버 색상

앱의 아이콘을 기반으로하지만 색상 값을 얻는 특정 패턴을 볼 수는 없습니다.

하지 않습니다 다음 중 하나가 될 것 같다 :

  1. 전체 아이콘의 평균 색상 값입니다. 그렇지 않으면 Chrome과 같은 멀티 컬러 아이콘으로 항상 갈색이 됩니다 .
  2. 이미지에서 가장 많이 사용 된 색상입니다. 그렇지 않으면 SQL Server Management Studio 아이콘 (왼쪽에서 6 번째)에 노란색이 표시됩니다. 또한 Chrome 아이콘은 빨간색, 녹색 및 노란색을 동일하게 사용했습니다.
  3. 아이콘의 상단을 나타내는 Chrome이 빨간색이고 아이콘의 하단을 나타내는 메모장 ++ (오른쪽에서 두 번째)이 녹색이므로 아이콘 내의 특정 픽셀 좌표에있는 색상입니다.

나는 ux.stackoverflow.com 에서이 질문을했는데 주제를 벗어난 것으로 닫혔지만 누군가 다음과 같이 대답했습니다.


이 MSDN 블로그 기사 에서 Raymond Chen 설명한대로 :

어떤 사람들은 어떻게되는지 묻습니다. 정말 특별하지 않습니다. 코드 는 아이콘에서 주요 색상 만 찾습니다 . (그리고 비주얼 디자이너는 이런 종류의 것을 고집하기 때문에, 검정, 흰색 및 회색 음영은이 계산의 목적 상 "색상"으로 간주되지 않습니다.)


그러나 나는 "주요한"색상이 어떻게 계산되는지 설명하지 않기 때문에 그 대답에 실제로 만족하지 못했습니다. SQL Management Studio 아이콘에서 눈에 띄는 색은 적어도 노란색입니다. 그러나 하이라이트는 녹색입니다. 특히 알고리즘이 무엇인지 알고 싶습니다.


An average colour value from the entire icon, otherwise you would get brown all the time.말이되지 않습니다. 예를 들어 Skype , command-prompt 또는 µTorrent 아이콘의 평균은 어떻게 갈색입니까? ಠ_ ఠ (마지막으로 Windows의 색상 계산 알고리즘 중 하나를 리버스 엔지니어링했을 때, 몇 년 동안 많은 관심과주의를 기울이는 데 많은 시간과 노력이 들었습니다.
Synetech

@Synetech 당신이 맞아요-방금 사용할 수있는 다양한 아이콘과 여러 색상을 포함하는 많은 아이콘에 대해 생각하고있었습니다. 예를 들어 Chrome 아이콘 또는 IIS 아이콘에는 각각 빨강, 녹색 노랑 및 파랑 및 녹색, 노랑 및 파랑이 포함됩니다. 게으른 색상이 어두운 갈색으로 평균화 될 것이라고 생각했지만 많은 단색 아이콘에는 적용되지 않는 것이 맞습니다.
theyetiman

ONT 게시물코멘트 크롬이의 버전과에 대한 질문에 대한 링크 링크 된 페이지가 크롬의 소스 코드를 검사하여 설명합니다. (적어도) 설명은 단순한 알고리즘이 아닙니다.
Synetech

@Synetech 좋은 찾기-이제 우리는 어딘가에 가고 있습니다. 이것은 내가 찾던 줄을 ​​따라 있습니다. 이제 Win7 소스 코드 만 얻을 수 있다면 ...;)
theyetiman

나는 추측하지만 모든 픽셀은 3 차원 공간 (각 색상마다 1 값)에 있습니다. 예를 들어 10x10x10의 그룹 / 큐브로 나누면 RGB (12,56,97) 색상이 그룹 / 큐브 (10-20,50-60,90-100)에있게됩니다. 이 그룹으로 픽셀을 나눌 때 가장 큰 픽셀을 추적합니다. 마지막으로 픽셀이 가장 많은 그룹을 평균하여 주요 색상을 결정합니다. 그룹의 규모는 성능 / 정확도의 거래입니다.
mxt3

답변:


14

에서 윈도우 7 바탕 화면에 오신 것을 환영합니다 정확히 35분에서 :

27 가지 버킷에 걸쳐 정규화 된 컬러 히스토그램이며, 검정, 흰색, 알파 채널 및 회색을 추출하고 가장 지배적 인 RGBV [sic] 값을 사용합니다.

"RGBV"가 문제가되지 않기 때문에 스피커가 "RGB"를 의미한다고 확신합니다. "정규화 된"부분은 실제로 중요하지 않습니다. 각 "버킷"에 몇 개의 픽셀이 들어가는 지 효과적으로 계산합니다. 따라서 각 픽셀은 각 채널 값의 위치에 따라 27 개의 버킷 중 하나에 배치됩니다 (3 차원 배열로 정렬되고 큐브 루트는 27 임). Windows는 각 색상 채널에 대해 해당 색상의 강도가 범위의 하단, 중간 또는 상단 청크에 있는지 여부를 결정합니다. 범위는 약 0-60, 60-200 및 200-255 인 것으로 나타납니다. 완전히 투명한 픽셀은 전혀 포함되지 않습니다.

그런 다음 Windows는 픽셀이 가장 많은 버킷을 찾아 검은 색, 흰색 및 회색을 무시합니다 (세 채널 모두 범위의 동일한 세 번째에있는 버킷). 이는 SQL Server Management Studio 아이콘을 설명합니다. 실제로 노란색으로 표시되는 대부분은 "흰색"버킷에 덤프되어 무시됩니다.

수용 가능한 버킷에 픽셀이 없으면 프로그램은 시스템 색 구성표에 관계없이 연한 파란색 오버레이를 얻습니다. (명령 프롬프트를 참조하십시오.) 아이콘이없는 프로그램의 경우 Windows 기본 아이콘이 파란색 또는 녹색 오버레이를 생성하더라도 흰색 / 반투명 오버레이가 표시됩니다.

여러 프로그램이 동일한 하이라이트 색상을 갖는 것을 막을 수있는 것은 없습니다. 예를 들어 최신 Chrome 아이콘은 Windows 8의 탐색기와 같은 노란색으로 표시됩니다.

동점이있는 경우 이미지의 색상 순서에 의존하지 않는 미리 정해진 순서가 있습니다. 이것은 아마도 최대 값을 찾은 방법의 결과 일 것입니다. 이전에 확인한 버킷은 나중에 연결 되어도 계속 최대 값입니다. 노란색은 첫 번째로 확인 된 버킷 중 하나 인 것으로 보입니다.

선정 된 버킷이 발견되면 하이라이트 색상이 버킷 범위의 중간에있는 색상으로 설정됩니다.

테스트 사례 (제공된 숫자는 RGB 값) :

밝은 노랑(255, 247, 209) → 기본 강조 표시
빨간 47(47, 0, 0) → 기본 강조 표시
레드 60(60, 0, 0) → 진한 빨간색
레드 66(66, 0, 0) → 진한 빨간색
진한 빨간색(165, 0, 0) → 적색
회색 128( 128, 128, 128) → 기본 하이라이트
반(0, 148, 255) 및 (255, 0, 0) →
더 반같은 영역의 빨간색 (0, 255, 0) 및 (255, 216, 0) → 노란색은
같은 반전동일하지만 반전 됨 → 노랑
화이트 레드 180(255, 180, 180) → 연한 빨강
화이트 레드 210(255, 210, 210) → 기본적
병사으로 동일한 영역의 순수한 파랑, 순수한 노랑, 순수한 빨강 및 순수한 녹색을 강조 표시 → 노랑
화이트 레드 61(255, 61, 61) → 빨강
빨간 82(82, 0, 0) → 진한 빨간색


이것은 아직 가장 정답입니다. 고맙습니다. 그것은 내가 문제를 겪은 모든 것을 설명하고 강렬한 깊이로 들어갑니다. 브라보.
theyetiman

@ Ben NI는 이것이 멍청한 질문처럼 보이지만 여전히 알고 있습니다. 왜 버킷이 27 개입니까? 나는 그것이 3 ^ 3이라는 것을 알고 있으며, 첫 번째 3은 R, G 및 B 색상이라고 생각하지만 두 번째 3은 무엇을 의미합니까?
aexl

@TheSexiestManinJamaica 나는 그것이 임의적이라고 생각한다. 아마도 Microsoft는 3 ^ 3의 우아함을 좋아했을 것입니다. 가능한 색상이 거의없고 (3 ^ 2는 9에 불과) 많은 색상이 가능합니다 (3 ^ 4는 81).
Ben N

0

내 생각에 상단부터 시작하여 각 색상에 대해 R, G 및 B 값을 얻을 수 있으며 그 값에서 세 가지 중 가장 높은 값과 가장 낮은 값을 가져 와서 비교합니다. 가장 높고 가장 낮은 간격이 가장 큰 색상은 이미지에서 가장 밝은 색상입니다. 이제 Chrome 아이콘의 경우 가장 큰 간격으로 묶여있는 여러 색상이있을 수 있지만 빨간색이 맨 위에 있으므로 먼저 발생하므로 해당 이미지에서 지배적입니다. (Chrome 로고를 120도 회전하고 대신 녹색 또는 노란색이 지배적인지 확인하는 등 고유 한 아이콘을 디자인하여이를 테스트 할 수 있다고 가정합니다.)


0

내가 이해하는 방식에서-OS는 색상을 결정할 때 몇 가지 요소 이상을 고려합니다.

  1. OS에서이 애플리케이션에 이미 색상을 할당 했습니까? 그렇다면 7로 건너 뜁니다.
  2. 이 색상은 프로그램 코드에 정의되어 있습니까? 그렇다면 프로그램에서 사전 정의 된 색상을 사용하십시오. (예, 이것을 제어하는 ​​Windows 프로그램에 대한 변수 설정이 있습니다. 아니요, 정확한 변수 이름을 모르겠습니다)
  3. 1 = 거짓 (사전 정의 된 색상이 없음) 인 경우 사용되는 아이콘의 주요 색상을 정의하십시오. (이를 위해 검은 색, 흰색 및 회색 색상은 무시됩니다)
  4. 2가 사용 된 단일 색상을 정의 할 수없고 사용 된 다른 색상보다 더 지배적 인 경우 아이콘의 평균 RBG 값을 정의하십시오. 정의 된 색상이 달성되면이 색상을 사용하십시오. 이를 위해 흰색, 검은 색, 회색 및 갈색의 색상은 완전히 무시됩니다.
  5. 3이 블랙리스트 색상 중 하나 (흑백 또는 회색)를 생성하는 경우 블랙리스트 색상에 영향을주지 않으면 서 평균 RBG 값에 가장 가까운 색상을 무작위로 할당하십시오.
  6. 색상 할당이 완료되면 나중에 색상을 더 빨리 할당 할 수 있도록 색상 정보를 레지스트리에 저장하십시오.
  7. 할당 된 색상이 현재 열려있는 다른 응용 프로그램에서 이미 사용한 색상과 일치하면 할당 된 색상의 15 % 내에서 임의의 색조로 색상을 오프셋합니다.
  8. 색상을 표시합니다.

이것은 매우 잘못되었을 수 있으며 대부분 추측이지만, 이것은 OS가 색상을 결정하는 데 매우 잘 사용할 수있는 방법을 쉽게 이해할 수있게합니다. 또한 사전 정의 된 색상이없는 프로그램과 같은 양의 색상을 사용하는 아이콘에 흰색 / 갈색 / 검정이 할당되지 않는 방법과 검정, 흰색 및 회색이 할당되지 않은 이유에 대해 설명합니다. 또한 아이콘이없는 프로그램 (여전히 일부가 있음)은 투명한 핫 트래킹 색상을 나타내므로 마우스를 가져 가면 아이콘이 '밝게'표시됩니다.


응용 프로그램이 고유 한 색상을 정의 할 수있는 방법이 없습니다. 또한 같은 색상을 가진 두 프로그램에 대한 규칙은없는 것 같습니다. 하지만 재미있는 아이디어.
벤 N

-2

다음은 이미지의 RGB 색상을 평균화하는 VB 코드입니다.

Function AverageRGB(ByRef P As PictureBox) As Long

Dim Count As Long
Dim Red As Long
Dim Green As Long
Dim Blue As Long
Dim Hexed As String
Dim X As Long
Dim Y As Long
Count = 0


For X = 0 To P.Width Step P.Width \ 32


    For Y = 0 To P.Height Step P.Height \ 32
        Hexed = Right("00000" & Hex(P.Point(X, Y)), 6)
        Red = Red + CLng("&h" & Right(Hexed, 2))
        Green = Green + CLng("&h" & Mid(Hexed, 3, 2))
        Blue = Blue + CLng("&h" & Left(Hexed, 2))
        Count = Count + 1
    Next

Next

AverageRGB = RGB(Red \ Count, Green \ Count, Blue \ Count)
End Function

그것은 OS에서 사용하기에 실제로 최적화되어 있지는 않지만 기본적인 아이디어를 제공해야합니다 -Source


3
그는 이미 단순 / 기본적인 평균이 아니라고 설명했다. 코드를 통해 Chrome 아이콘을 실행하면 직접 확인할 수 있습니다.
Synetech
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.