我如何在C#中編寫代表HSL顏色和RGB顏色的類?我如何將HSL和RGB顏色表示爲C#中的類?
一旦我有了,是否可以添加一個打印出每個類屬性的方法?我聽說過ToString()
,但我不確定如何使用它。
一些示例代碼將非常有用,因爲我是一名學生,並試圖學習如何使用C#。謝謝!
我如何在C#中編寫代表HSL顏色和RGB顏色的類?我如何將HSL和RGB顏色表示爲C#中的類?
一旦我有了,是否可以添加一個打印出每個類屬性的方法?我聽說過ToString()
,但我不確定如何使用它。
一些示例代碼將非常有用,因爲我是一名學生,並試圖學習如何使用C#。謝謝!
當您發佈「問題」,要求他人爲您編寫代碼時,人們會很惱火。很多來自新用戶的問題似乎要求這個,你甚至這樣做明確。希望這可以解釋您從其他用戶遇到的一些負面反應,無論是投票表決,投票結束還是刪除問題。我希望這裏沒有給你這樣一個消極的經歷,你被趕走了。將來你會發現,如果你顯示一些先試圖幫助自己的證據,那麼人們更願意幫助你。向我們展示一些你已經編寫的代碼(但不能工作),或者提出一些可能的方法來嘗試自己解決問題。大多數問題不是「太微不足道」,而不是真正的問題。我們不是代碼編寫服務,但我們仍然樂於提供幫助。
這就是說,我會盡量繼續回答問題,正如我在評論中所做的一樣。如果僅僅是因爲我喜歡編碼處理顏色和色彩空間轉換的問題。如何在色彩空間之間進行轉換的問題已經在SO上多次提出並回答。例如,我(和其他幾個人)提供了一種算法(用幾種不同的語言)here。將其中任何一種轉換爲您選擇的任何語言都應該很簡單。至於「如何編寫一個類來表示這些色彩空間中的值」,這非常簡單。谷歌搜索也會得出幾個已經完成了相同事情的人的結果。就個人而言,我建議創建一個結構,而不是一個類,因爲它是一個非常輕量級的對象,顏色值是不可變的(意味着它們不會改變)。這是一個完美的結構適合,如果你想更多的解釋差異,你可以找到that question有already been asked和answered here as well。
但無論您選擇什麼,最終結果看起來都非常相似。我假設如果這是一個編程課程,你已經被教會了所有你需要知道的能夠自己做到這一點。意思是,你應該已經瞭解了私有字段(成員變量),公共屬性和方法。您將首先創建一個具有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
method,它允許您創建一個包含「格式項」的字符串,並將其替換爲相應對象的值。例如,以下是我的工作方式:
/// <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,自己編寫代碼,並嘗試幾種不同的變體。確保你瞭解它是如何工作的,我已經完成了什麼,以及如何自己做到這一點。祝你好運!
看起來像作業...投票關閉 – 2011-01-22 22:05:36
我只需要幫助寫的HSLColor類和RGBColor類 – PAPA78 2011-01-22 22:11:34