您如何使用DwmGetColorizationColor
?
documentation表示它返回两个值:
0xAARRGGBB
这是我喜欢的一种颜色,一个很好的呕吐绿色:
您可以注意到颜色为绿色,半透明标题栏(白色背景)非常清晰地显示了鼻涕颜色:
我尝试从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值,那么它远远不能满足我想要的鼻涕绿色。这是
Lime
不是DwmGetColorizationColor
绿色,而是返回几乎完全透明的黑色。
所以问题是:如何在Windows Vista / 7中获得玻璃颜色?
我尝试使用DwmGetColorizationColor
,但效果不佳。
A person with same problem, but a nicer shiny picture吸引你松鼠:
所以,归结为 - DwmGetColorizationColor是完全的 无法用于尝试的应用程序 将当前颜色应用到 不透明的表面。
我爱this guy's screenshots比我好得多。使用他的截图作为模板,我制作了更多的火花:
对于最后两个截图,alpha混合芯片是一个真正的部分透明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问题的毒药。你可以
我一直想问这个问题一年多了。我一直都知道这是不可能回答的,让人们真正关注的唯一方法就是拥有丰富多彩的截图;开发人员被闪亮的东西所吸引。但在不利方面,这意味着我不得不把各种各样的工作放到诱饵上。
答案 0 :(得分:10)
着色颜色!=所选的基色。我知道这是误导。
但我很困惑。您借来的图片来自我的帖子“Retrieving Aero Glass base color for opaque surface rendering”。这不是你想做的吗?我还在帖子中指出了存储所有颜色信息的注册表位置(HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ DWM)以供检索。
已编辑8/26
DwmGetColorizationColor(dwmapi.dll)返回“着色颜色”,它是各种颜色(包括您选择的基色)和着色器逻辑的混合,以实现整体玻璃效果。
您需要/想要的所有颜色信息都可以在上面提到的注册表项中找到。基色,混合中使用的颜色以及产生的着色颜色都在那里。
(上面的密钥出现在Windows Vista及更高版本上。)
答案 1 :(得分:2)
我相信我已经解决了Aero Color。 ColorizationColor给出的颜色实际上是AARRGGBB,但它并没有按你想象的方式使用。并且为了解决最终颜色,您还需要获得颜色强度,如下所示:http://www.codeproject.com/Articles/610909/Changing-Windows-Aero-Color
第一步是解析AARRGGBB。然后获取生成的RGB并转换为HSV。完全亮度的纯色调加饱和度是基色。现在将Alpha叠加为纯色调和饱和度顶部的Alpha灰度,以获得Aero颜色。然后将该颜色覆盖在帧颜色上:rgb(235,235,235)在Intensity处获得最终的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);
答案 2 :(得分:1)
A0F040如何看待你?
OP编辑:这就是0xA0F040对我的看法: