如何在HS#中将HSL和RGB颜色表示为一个类?

如何在C#中编写代表HSL颜色和RGB颜色的类? 有了这个,是否可以添加一个打印出每个类属性的方法?我听说过
ToString()
,但我不确定如何使用它。 一些示例代码非常有用,因为我是一名学生,并试图学习如何使用C#。谢谢!     
已邀请:
当您发布“问题”,要求其他人为您编写代码时,人们会感到恼火。来自新用户的大量问题似乎都要求这样做,而你的用户甚至会明确这样做。希望这可以解释您从其他用户那里遇到的一些负面反应,无论是在downvoting,投票关闭,甚至删除你的问题。我希望这并没有给你带来如此消极的经历,以至于你被赶走了。将来,如果你出现一些试图先帮助自己的证据,你会发现人们更愿意帮助你。向我们展示一些您编写的代码(但不起作用),或者建议您尝试自己解决问题的一些可能方法。大多数问题不是“太微不足道”,而是真正的问题。我们不是代码编写服务,但我们仍然很乐意提供帮助。 话虽如此,我会尝试继续实际回答问题,就像我在评论中所做的那样。如果只因为我喜欢编码处理颜色和色彩空间转换的问题。关于如何在色彩空间之间进行转换的问题已经在SO上多次提出并回答过。例如,I(和其他几个)在这里提供了一种算法(用几种不同的语言)。将其中任何一种转换为您选择的任何语言都应该很简单。 至于“我如何编写一个类来表示那些颜色空间中的值”,这很简单。谷歌搜索也会出现几个已经完成同样事情的人的结果。就个人而言,我建议创建一个结构,而不是一个类,因为它是一个非常轻量级的对象,颜色值是不可变的(意味着它们不会改变)。这是一个完美的结构,如果你想要更多解释差异,你可以发现这个问题已经被问到并在这里得到解答。 但无论你选择哪种,最终结果都非常相似。我认为,如果这是一个编程课程,你已经学到了所有你需要知道的能够自己做的事情。意思是,您应该已经了解了私有字段(成员变量),公共属性和方法。您将首先创建一个包含3个私有字段的结构来表示每个颜色值;色调(H),饱和度(S)和亮度(L)。它们应该都是
Integer
类型,因为各个颜色值是0到100之间的整数,或0到360.如果您关心最大精度,可以将它们存储为类型
Decimal
并在公共场合处理转换为
Integer
将它们暴露给世界的属性,但我怀疑这是必要的。在任何一种情况下,您接下来都需要创建将您的私有字段公开给全世界的公共属性。这是面向对象编程的基本概念,不应该是对您而言的新概念。 (如果是的话,你现在真的需要停下来拿一本向你解释OOP的书。不要通过Go,不要收200美元。)那些公共财产应该是
Integer
,每个应该有3个各个颜色组件值,它们应该(至少如果你创建一个不可变结构)是只读的(只包括一个getter,而不是一个setter)。像这样的东西:
/// <summary>
/// Represents an HSL color, composed of individual
/// Hue, Saturation, and Lightness attributes.
/// </summary>
public struct HSLColor
{
    private int _hue;
    private int _saturation;
    private int _lightness;

    /// <summary>
    /// The hue attribute of the color.
    /// (This is a value, in degrees, from 0 to 360.)
    /// </summary>
    public int Hue
    {
        get { return _hue; }
    }

    /// <summary>
    /// The saturation attribute of the color.
    /// (This is a percentage between 0 and 100.)
    /// </summary>
    public int Saturation
    {
        get { return _saturation; }
    }

    /// <summary>
    /// The lightness attribute of the color.
    /// (This is a percentage between 0 and 100.)
    /// </summary>
    public int Lightness
    {
        get { return _lightness; }
    }
}
最后,你说你需要覆盖
ToString
方法。正如您应该已经了解的那样,此方法由.NET Framework中的每个类提供,因为它继承自基础
Object
。当然,它被标记为
virtual
,它允许您覆盖它并提供您自己的实现。最困难的部分是弄清楚其返回值应该是什么样子。您可以选择将颜色表示为三元组,显示其三个单独的组件值。无论如何,您需要使用
String.Format
方法,该方法允许您创建包含“格式项”的字符串,该字符串将被相应对象的值替换。例如,我是这样做的:
/// <summary>
/// Returns the "(HH, SS, LL)" representation of this HSLColor structure.
/// </summary>
public override string ToString()
{
    return string.Format("({0}, {1}, {2})",
                         this.Hue,
                         this.Saturation,
                         this.Lightness);
}
这应该足以让你开始。我强烈建议您不要复制并粘贴此处提供的代码作为您的作业。你没有这样学习任何东西。启动IDE,自己编写代码,并尝试几种不同的变体。确保你了解它是如何工作的,我做了什么,以及你如何能够自己做到这一点。祝你好运!     

要回复问题请先登录注册