web-dev-qa-db-ja.com

Windows 7は、タスクバーの「色のホットトラッキング」に使用する色をどのように計算しますか?

これはかなり長い間私に興味をそそられました。

現在実行中のアプリのタスクバーボタンのホットトラッキングホバーハイライトとして使用する色を決定するためにWindows7 Aeroが使用するアルゴリズムを知っている人はいますか?

Windows 7 taskbar hover colours

それは間違いなくアプリのアイコンに基づいていますが、色の値を取得している場所の特定のパターンを見ることができません。

それではないようです:

  1. アイコン全体の平均色値、そうでない場合は茶色になります いつも Chromeのようなマルチカラーのアイコンで。
  2. 画像で最も使用されている色。それ以外の場合は、SQL Server Management Studioアイコン(左から6番目)が黄色になります。また、Chromeアイコンは、赤、緑、黄色を同じように使用しました。
  3. Chromeは赤(アイコンの上部を示す)であり、Notepad ++(右から2番目)は緑(アイコンの下部を示す)であるため、アイコン内の特定のピクセル座標にある色。

Ux.stackoverflow.comでこの質問をしたところ、トピック外としてクローズされましたが、誰かが次のように答えました。


Raymond Chenが このMSDNブログ記事 で説明しているように:

一部の人々はそれがどのように行われるかを尋ねます。それは本当に特別なことではありません。コードは、アイコン内の優勢な色を探すだけです。 (そして、ビジュアルデザイナーはこの種のことにこだわるので、黒、白、および灰色の色合いは、この計算の目的では「色」とは見なされません。)


しかし「優勢な」色がどのように計算されるかを説明していないので、私はその答えに本当に満足していませんでした。確かに、SQL Management Studioアイコンでは、少なくとも私の目には、主な色は黄色です。しかし、ハイライトは緑色です。 具体的には、アルゴリズムとは何か知りたいです。

21
theyetiman

から Windows 7デスクトップへようこそ 正確に35分で:

これは27の異なるバケットにわたる正規化されたカラーヒストグラムであり、黒、白、アルファチャネル、およびグレーを抽出し、最も支配的なRGBV [原文のまま]値を使用します...

「RGBV」は問題ではないように思われるので、スピーカーが「RGB」と言うつもりだったと私はかなり確信しています。 「正規化された」部分は実際には重要ではありません。各「バケット」に含まれるピクセル数を効果的にカウントしています。したがって、各ピクセルは、各チャネルの値の位置に基づいて、27個のバケット(3次元配列に配置されます。27の立方根は3)の1つに配置されます。 Windowsは、各カラーチャネルについて、その色の強度が範囲の下部、中間、または上部のチャンクにあるかどうかを判断します。範囲は約0〜60、60〜200、および200〜255のように見えます。完全に透明なピクセルはまったく含まれていません。

次に、Windowsは、黒、白、灰色のバケット(3つのチャネルすべてが範囲の同じ3分の1にあるバケット)を無視して、ピクセルが最も多いバケットを見つけます。これは、SQL Server Management Studioアイコンを説明しています。黄色で表示されるものの多くは、実際には「白い」バケットにダンプされ、無視されます。

許容可能なバケットのいずれにもピクセルがない場合、システムの配色に関係なく、プログラムは水色のオーバーレイを取得します。 (コマンドプロンプトを参照してください。)プログラムにアイコンがない場合、Windowsのデフォルトアイコンが青または緑のオーバーレイを生成する場合でも、プログラムは白/半透明のオーバーレイを取得します。

複数のプログラムが同じハイライトカラーを持つのを止めるものは何もありません。たとえば、最新のChromeアイコンは、Windows8のエクスプローラーと同じ黄色になります。

同点の場合、画像の色の順序に依存しない所定の順序があります。これはおそらく、最大値が検出された方法の結果です。前にチェックされたバケットは、後のバケットが同点になった場合でも、引き続き最大値になります。黄色は最初にチェックされたバケットの1つであるようです。

勝者のバケットが見つかると、ハイライトの色はバケットの範囲の中央のどこかに設定されているように見えます。

テストケース(提供されている数値はRGB値です):

bright yellow (255、247、209)→デフォルトのハイライト
red 47 (47、0、0)→デフォルトのハイライト
red 60 (60、0、0)→濃い赤
red 66 (66、0、0)→濃い赤
dark red (165、0、0)→赤
gray 128 (128、128、128)→デフォルトのハイライト
halfs (0、148、255)および(255、0、0)→赤
more halfs (0、255、0)と(255、216、0)同じ面積→黄色
same reversed 同じですが反転→黄色
white red 180 (255、180、180)→ライトレッド
white red 210 (255、210、210)→デフォルトのハイライト
quarters 同じ面積の純粋な青、純粋な黄色、純粋な赤、純粋な緑→黄色
white red 61 (255、61、61)→赤
red 82 (82、0、0)→濃い赤

14
Ben N

私の推測では、各色について、上から順にR、G、およびBの値を取得し、それらから3つの最高値と最低値を取得して比較します。最高と最低の間に最大のギャップがある色は、画像内で最も明るい色になります。たとえば、Chromeアイコンの場合、最大のギャップのためにいくつかの色が結び付けられている可能性がありますが、赤が上にあるため、最初に遭遇します。したがって、それが支配的です。その画像。(Chromeロゴを120度回転させて、代わりに緑または黄色が優勢かどうかを確認するなど、独自のアイコンをデザインすることで、これをテストできると思います。)

0
Darrel Hoffman

私の理解では、OSは色を決定する際にいくつかの要素を考慮に入れています。

  1. OSによってこのアプリケーションに色がすでに割り当てられていますか?その場合は、7にスキップします。
  2. この色はプログラムコードで定義されていますか?その場合は、プログラムから事前定義された色を使用してください。 (はい、これを制御するWindowsプログラムの変数設定があります、いいえ、正確な変数名はわかりません)
  3. 1 = false(事前定義された色がないことを意味する)の場合、使用されるアイコンの主要な色を定義します。 (このため、黒、白、灰色は無視されます)
  4. 2が使用される単一の色を定義できず、使用される他の色よりも優勢である場合は、アイコンの平均RBG値を定義します。定義された色が達成された場合は、これを使用します。この目的のために、白、黒、灰色、茶色の色は完全に無視されます。
  5. 3の結果がブラックリストの色(ブラックホワイトまたはグレー)のいずれかになる場合は、ブラックリストの色を侵害することなく、平均RBG値を最もよく表す色をランダムに割り当てます。
  6. 色の割り当てが正常に完了したら、後ですばやく色を割り当てることができるように、色情報をレジストリに保存します。
  7. 割り当てられた色が、現在開いている別のアプリケーションですでに使用されている色と一致する場合は、割り当てられた色の15%以内のランダムな色相量で色をオフセットします。
  8. 表示色。

これは非常に間違っている可能性があり、ほとんどが推測ですが、これにより、OSが色を決定するために使用できる方法を簡単に理解できます。また、事前定義された色のないプログラムと、同じ量の色を使用するアイコンに白/茶色/黒が割り当てられない方法と、黒、白、灰色が割り当てられない理由についても説明します。また、アイコンがないプログラム(まだいくつかあります)は透明なホットトラッキングカラーを表示することに注意してください。これにより、カーソルを合わせるとアイコンが「明るく」なります。

0
Josh Raymond

ハッシュタグを越えてコードを評価するサーバーサイド言語であるHTMLですでに機能しており、ページのフォントの色を変更することで、いくつかのエントリが書き込まれ、それぞれがHTCOne-timeに送信されます。 Hypertexプロトコルロック転送が連絡先のサーバーに再度送信され、サーバーが画面の背後にないことをロックして、ボタンを押して応答できるようにします。メッセージのように機能する0077ccの影も確認してください。 SMSメッセージの受信または富の横方向の分割。このSMSでは、HTMLおよび受信メッセージはHTMLメッセージです。

007,0077cc

006bb7

005fa3

00538

00477

3b66

その後、ハッシュタグの色合いの割合、モノクロの色、影のテキストをエンコードする必要があります

0
Simin yazdanian