gpt4 book ai didi

c# - 获取渐变上特定位置的颜色

转载 作者:可可西里 更新时间:2023-11-01 08:06:16 26 4
gpt4 key购买 nike

我有以下 GradientStopCollection :

GradientStopCollection grsc = new GradientStopCollection(3);
grsc.Add(new GradientStop(Colors.Red, 0));
grsc.Add(new GradientStop(Colors.Yellow, .5));
grsc.Add(new GradientStop(Colors.Green, 1));

我能否获得特定“位置”的颜色?例如:

  • 位置 0:红色
  • 位置 .5:黄色
  • 位置 .75:Yellow<~>Green

WPF中是否有API/一些可以做到这一点的第三方库?

最佳答案

要在特定点获取颜色是理解所讨论的渐变所必需的,这不是 GradientStopCollection 类的作用。这个类的概念不是理解一个渐变,而应该是对一个渐变的支持的简单集合。

了解每个类的概念很重要。

要得到一种颜色,需要实例化一个代表渐变的类,使用渐变来绘画,最后从绘画中得到它们的颜色。

但我会给你一个更快的解决方案。您可以使用梯度算法生成单个点。这是如何使用线性梯度算法执行此操作的实现:

public static class GradientStopCollectionExtensions
{
public static Color GetRelativeColor(this GradientStopCollection gsc, double offset)
{
var point = gsc.SingleOrDefault(f => f.Offset == offset);
if (point != null) return point.Color;

GradientStop before = gsc.Where(w => w.Offset == gsc.Min(m => m.Offset)).First();
GradientStop after = gsc.Where(w => w.Offset == gsc.Max(m => m.Offset)).First();

foreach (var gs in gsc)
{
if (gs.Offset < offset && gs.Offset > before.Offset)
{
before = gs;
}
if (gs.Offset > offset && gs.Offset < after.Offset)
{
after = gs;
}
}

var color = new Color();

color.ScA = (float)((offset - before.Offset) * (after.Color.ScA - before.Color.ScA) / (after.Offset - before.Offset) + before.Color.ScA);
color.ScR = (float)((offset - before.Offset) * (after.Color.ScR - before.Color.ScR) / (after.Offset - before.Offset) + before.Color.ScR);
color.ScG = (float)((offset - before.Offset) * (after.Color.ScG - before.Color.ScG) / (after.Offset - before.Offset) + before.Color.ScG);
color.ScB = (float)((offset - before.Offset) * (after.Color.ScB - before.Color.ScB) / (after.Offset - before.Offset) + before.Color.ScB);

return color;
}
}

PS: This algorithm assumes there are no stops with the same offset. If there are multiple stops with the same offset a InvalidOperationException will be thrown.

在您当前的上下文(命名空间上下文)中添加此类

要在任何地方插入这样的颜色:

var color = grsc.GetRelativeColor(.75);

关于c# - 获取渐变上特定位置的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9650049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com