我試着通過喬尼皮亞齊寫的方法。但它沒有正常工作。
所以我下面寫我自己的一個:
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