有没有API可以获取图标的Windows7颜色
本文关键字:Windows7 颜色 图标 获取 API 有没有 | 更新日期: 2023-09-27 18:06:20
可能重复:
Windows 7 Tasbar图标突出显示颜色
Windows7使用某种算法以某种方式检测Windows7任务栏中固定项目的平均颜色。请注意,当您将鼠标悬停在项目上时,光晕颜色与图标相同。
有没有API可以获得这种颜色?
或者还有其他选择吗?
[根据请求编辑:C#代码]
好吧,在C#中,实际上可以或多或少地像我给出的链接一样完成,但实际上没有理由做所有的屏蔽和移位,因为你已经可以直接在C#中访问System.Drawing.Color
的ARGB值了。(哦,顺便说一句,我不确定是否要平均Alpha值,我选择了"是"。(
如果源数据位于int
s而不是Color
中,则始终可以使用函数Color.FromArgb
和单个int
参数来转换值。(它还支持从单个值创建它,如示例代码的return
s所示。(
LINQ版本看起来更容易理解,但我给出了另一个版本,因为它基本上是我链接的原始代码的C#端口。
LINQ版本:
public Color AverageColorsWithLINQ(Color[] ColorsToAverage)
{
// the LINQ way
int AlphaAverage = (int)ColorsToAverage.Average(c => c.A);
int RedAverage = (int)ColorsToAverage.Average(c => c.R);
int GreenAverage = (int)ColorsToAverage.Average(c => c.G);
int BlueAverage = (int)ColorsToAverage.Average(c => c.B);
return Color.FromArgb(
AlphaAverage, RedAverage, GreenAverage, BlueAverage
);
}
循环、求和和和除法版本:
public Color AverageColorsWithFor(Color[] ColorsToAverage)
{
int AlphaTotal = 0;
int RedTotal = 0;
int GreenTotal = 0;
int BlueTotal = 0;
foreach (Color AColor in ColorsToAverage)
{
AlphaTotal += AColor.A;
RedTotal += AColor.R;
GreenTotal += AColor.G;
BlueTotal += AColor.B;
}
double NumberOfColors = ColorsToAverage.Length;
int AlphaAverage = (int)(AlphaTotal / NumberOfColors);
int RedAverage = (int)(RedTotal / NumberOfColors);
int GreenAverage = (int)(GreenTotal / NumberOfColors);
int BlueAverage = (int)(BlueTotal / NumberOfColors);
return Color.FromArgb(
AlphaAverage, RedAverage, GreenAverage, BlueAverage
);
}
好吧,我想看看如何调整颜色的亮度?它涵盖了几种不同的方法
我真的不确定Windows7使用的是什么型号,但基本上有不同的型号可以用来从颜色空间中挑选颜色,特别是HSL和HSV(http://en.wikipedia.org/wiki/HSL_and_HSV)两者都可以用来增加和减少感知到的颜色亮度,而不会改变太多。
重读你的问题后,我想我可能误解了。如果你真的想平均一块颜色,我会给它一个镜头:http://blog.soulwire.co.uk/code/actionscript-3/extract-average-colours-from-bitmapdata。不过,它看起来像是通过RGB进行的,我还不够熟悉,不知道这是否会产生好的结果(例如,它不能很好地提高或降低颜色的亮度来按比例调整颜色…(
因此,如果这不能给你带来好的结果,我建议你尝试将所有颜色转换为HSV或HSL,将这些值平均在一起,然后转换回RGB。