55

どのように使用しますDwmGetColorizationColorか?

ドキュメントには、次の 2 つの値が返されると記載されています。

  • 0xAARRGGBBガラス合成に使用される色を含む32 ビット
  • 「色が不透明なブレンドである場合」に真であるブール値パラメータ (それが何を意味するにせよ)

これは私が好きな色、すてきなピュークグリーンです。 代替テキスト

色が緑がかっており、半透明のタイトル バー (白い背景に対して) が鼻水色を非常にはっきりと示していることがわかります。 ここに画像の説明を入力

私はWindowsから色を取得しようとしています:

DwmGetColorizationColor(dwCcolorization, bIsOpaqueBlend);

そして、私は得る

dwColorization: 0x0D0A0F04
bIsOpaqueBlend: false

ドキュメントによると、この値の形式はAARRGGBBであり、以下が含まれます。

AA: 0x0D (13)
RR: 0x0A (10)
GG: 0x0F (15)
BB: 0x04 (4)

これはおそらく、色が (10, 15, 4) で、不透明度が ~5.1% であることを意味します。

しかし、この RGB 値を実際に見ると、私が望んでいたスノット グリーンにはほど遠いものです。ここは

  • (10, 15, 4) 不透明度ゼロ (元の色)、および
  • (10,15,4) 白/市松模様の背景に対して 5% の不透明度:

代替テキスト

Lime緑ではなくDwmGetColorizationColor、ほぼ完全に透明なを返します。

問題は、Windows Vista/7 でガラスの色を取得する方法です。

を使ってみDwmGetColorizationColorましたが、うまくいきません。


同じ問題を抱えている人ですが、リスを引き付けるため のより良い光沢のある写真:代替テキスト

要約すると、DwmGetColorizationColor は、現在の色を不透明な表面に適用しようとするアプリケーションにはまったく使用できません。


私はこの男のスクリーンショットが私のものよりずっと好きです。彼のスクリーンショットをテンプレートとして使用して、さらにいくつかのキラキラを作成しました。

代替テキスト

代替テキスト

代替テキスト

代替テキスト

代替テキスト

代替テキスト

最後の 2 つのスクリーンショットでは、アルファ ブレンド チップは真に部分的に透明な PNG であり、ブラウザーの背景にブレンドされます。涼しい!(私はそのようなオタクです)

編集 2: それらを虹色に配置する必要がありました。(私はそのようなオタクです)

編集 3: さて、もちろん、黄色を追加する必要があります。


文書化されていない/サポートされていない/壊れやすい回避策

DwmApi.dllエントリ ポイント 137からの文書化されていないエクスポートがあり、これを次のように呼びDwmGetColorizationParametersます。

HRESULT GetColorizationParameters_Undocumented(out DWMCOLORIZATIONPARAMS params);

struct DWMCOLORIZATIONPARAMS
{
   public UInt32 ColorizationColor;
   public UInt32 ColorizationAfterglow;
   public UInt32 ColorizationColorBalance;
   public UInt32 ColorizationAfterglowBalance;
   public UInt32 ColorizationBlurBalance;
   public UInt32 ColorizationGlassReflectionIntensity;
   public UInt32 ColorizationOpaqueBlend;
}

最初のパラメーターに関心があります: ColorizationColor.

レジストリから値を読み取ることもできます。

HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM
    ColorizationColor: REG_DWORD = 0x6614A600

したがって、appcompat の問題を作成する毒を選択します。あなたはできる

こちらもご覧ください


1年以上前からこの質問をしたいと思っていました。答えることは不可能であり、誰かに実際に注意を向けてもらう唯一の方法は、カラフルなスクリーンショットを用意することだと常に知っていました。開発者は光沢のあるものに惹かれます。しかし、マイナス面としては、ルアーを作るためにあらゆる種類の作業をしなければならなかったことを意味します.

4

3 に答える 3

11

Colorization color != 選択された基本色。それは誤解を招く、私は知っています。

しかし、私は混乱しています。あなたが借りた画像は、「不透明な表面レンダリングのための Aero Glass ベースカラーの取得」というタイトルの私の投稿からのものです。これはあなたがしたいことではありませんか?また、すべての色情報が格納されているレジストリの場所 (HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM) を取得目的で投稿に示しました。

8/26 編集

DwmGetColorizationColor (dwmapi.dll) は、さまざまな色 (選択した基本色を含む) とシェーダー ロジックのブレンドである「色付け色」を返し、全体的なガラス効果を実現します。

必要な/必要なすべての色情報は、上記のレジストリ キーにあります。ベースカラー、ブレンドに使用されるカラー、および結果のカラー化カラーはすべてそこにあります。

(上記のキーは、Windows Vista 以降に存在します。)

于 2010-08-24T23:16:12.420 に答える
2

エアロカラーは解決したと思います。ColorizationColor によって指定された色は、実際には AARRGGBB ですが、あなたが考えているようにはまったく使用されていません。また、最終的な色を解決するには、ここに示すように色の強度も取得する必要があります: http://www.codeproject.com/Articles/610909/Changing-Windows-Aero-Color

最初のステップは AARRGGBB を解析することです。次に、結果の RGB を HSV に変換します。完全な明るさでの純粋な色相と彩度がベース カラーです。純粋な色相と彩度の上にアルファで値をグレースケールとしてオーバーレイして、Aero カラーを取得します。次に、フレームの色の上にその色を重ねます: rgb(235, 235, 235) の強度で、最終的な Composite Aero の色の結果を取得します。

最後に、Aero フレームの色と一致する使用可能なツールバーの色を抽出する方法の例も提供しましたが、常に黒のテキストやその他の基本的な Aero 機能で動作します。これは、強度を 35% に制限することで実現されます。

数学は次のとおりです。

  function dwmToRgb() { 
    // Input Values
    var colorizationColor = "a84f1b1b"; // dwmcolor.clrColor = ColorizationColor
    var colorizationColorBalance = 60; // dwmcolor.nIntensity = ColorizationColorBalance 
    var F = 235; // Frame base grayscale color when Transparency is disabled

    // Parse the input values    
    var A = Math.round(parseInt(colorizationColor.substr(0,2),16)/2.55)/100;
    var R1 = parseInt(colorizationColor.substr(2,2), 16);
    var G1 = parseInt(colorizationColor.substr(4,2), 16);
    var B1 = parseInt(colorizationColor.substr(6,2), 16);
    var I = colorizationColorBalance/100;

    // Solve for HSV Value and pure Hue+Sat
    var V = Math.max(R1, G1, B1);
    var R2 = R1*255/V;
    var G2 = G1*255/V;
    var B2 = B1*255/V;

    // Aero Frame Pure Hue: Overlay Value @ Alpha over pure Hue+Sat
    var R3 = Math.round(V+(R2-V)-((R2-V)*A));
    var G3 = Math.round(V+(G2-V)-((G2-V)*A));
    var B3 = Math.round(V+(B2-V)-((B2-V)*A)); 
    var hexRGB3 = "#" + ((1 << 24) + (R3 << 16) + (G3 << 8) + B3).toString(16).slice(1);

    // Aero Frame Composite Color: Overlay RGB3 @ Intensity over Frame base color        
    var R4 = Math.round(R3+(F-R3)-((F-R3)*I));
    var G4 = Math.round(G3+(F-G3)-((F-G3)*I));
    var B4 = Math.round(B3+(F-B3)-((F-B3)*I));   
    var hexRGB4 = "#" + ((1 << 24) + (R4 << 16) + (G4 << 8) + B4).toString(16).slice(1);

    // Aero Toolbar Color: Overlay RGB3 @ max 35% Intensity over Frame base color   
    if (I > 0.35) { I5 = 0.35;} else { I5 = I;}
    var R5 = Math.round(R3+(F-R3)-((F-R3)*I5));
    var G5 = Math.round(G3+(F-G3)-((F-G3)*I5));
    var B5 = Math.round(B3+(F-B3)-((F-B3)*I5));   
    var hexRGB5 = "#" + ((1 << 24) + (R5 << 16) + (G5 << 8) + B5).toString(16).slice(1);
于 2014-04-09T08:09:31.943 に答える
1

A0F040 はあなたにどのように見えますか?


OP 編集:これは 0xA0F040 が私にどのように見えるかです:

代替テキスト

于 2010-08-24T20:52:24.547 に答える