繁体   English   中英

在颜色列表中找到“最大”或“最小”颜色?

[英]Finding the “maximum” or “minimum” color in a list of colors?

我有一个默认C#对象的列表。 它们全都是RGB格式,例如对于黑色来说,看起来像是0, 0, 0 是否可以找到此列表的“最大值”和“最小值”值? 我的意思是,在此颜色列表中找到最不强烈或最强烈的颜色,有点像一个列表。整数列表中的list.Maximum 尝试使用Google并没有给我任何好处,而尝试使用Intellisense仅给了我以下选择:

在此处输入图片说明

如果您为每种颜色计算该值并采用具有最高值的颜色,那么结果将是:

var intensity = (0.2125 * R) + (0.7154 * G) + (0.0721 * B);

使用Color对象的列表查找最大值,如下所示:

var cs = new List<Color> { Color.Red, Color.Black };
var max = cs.OrderByDescending(x => (0.2125 * x.R) + (0.7154 * x.G) + (0.0721 * x.B)).First();

交互式扩展 (和其他几个库)包括MaxBy()函数,该函数可让您查找具有指定函数最大值的颜色。

例如,要在列表中找到最蓝色的颜色:

// Update: Forgot MaxBy returns a list of all elements with the max value
var bluest = colors.MaxBy(c => c.B)[0];

或者,如果您不想使用其实现,则可以根据Aggregate()实现MaxBy() Aggregate()

public static T MaxBy<T, R>(this IEnumerable<T> seq, Func<T, R> selector)
    where R : IComparable
{
    return seq.Aggregate((x, y) =>
                         selector(x).CompareTo(selector(y)) < 0 ? y : x);
}

如果seq大,则执行效果将优于排序O(n lg n)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM