我试着通过乔尼皮亚齐写的方法。但它没有正常工作。
所以我下面写我自己的一个:
private static Color GetColorByOffset(GradientStopCollection collection, double offset)
{
GradientStop[] stops = collection.OrderBy(x => x.Offset).ToArray();
if (offset <= 0) return stops[0].Color;
if (offset >= 1) return stops[stops.Length - 1].Color;
GradientStop left = stops[0], right = null;
foreach (GradientStop stop in stops)
{
if (stop.Offset >= offset)
{
right = stop;
break;
}
left = stop;
}
Debug.Assert(right != null);
offset = Math.Round((offset - left.Offset)/(right.Offset - left.Offset), 2);
byte a = (byte) ((right.Color.A - left.Color.A)*offset + left.Color.A);
byte r = (byte) ((right.Color.R - left.Color.R)*offset + left.Color.R);
byte g = (byte) ((right.Color.G - left.Color.G)*offset + left.Color.G);
byte b = (byte) ((right.Color.B - left.Color.B)*offset + left.Color.B);
return Color.FromArgb(a, r, g, b);
}
我希望它为你的作品!
我在下面的xaml代码中使用了这个方法来显示指定的数字作为热图位置。
<LinearGradientBrush x:Key="CountBrush" StartPoint="0 0" EndPoint="1 0">
<GradientStop Offset="0.00" Color="ForestGreen"/>
<GradientStop Offset="0.50" Color="Yellow"/>
<GradientStop Offset="1.00" Color="OrangeRed"/>
</LinearGradientBrush>
<local:Int32ToColorConverter x:Key="CountToColorConverter" Min="0" Max="200" LinearBrush="{StaticResource CountBrush}"/>
我不认为这是WPF中的任何地方定义。我希望它取决于您的视频卡驱动程序的实现,缩放级别,用户颜色深度等。您可以使用Visual.PointToScreen方法,然后使用Graphics.CopyFromScreen来获取该像素。然后使用Bitmap.GetPixel检索颜色细节。 – akhisp 2012-03-10 21:19:24