2011-01-22 41 views
0

我如何在C#中編寫代表HSL顏色和RGB顏色的類?我如何將HSL和RGB顏色表示爲C#中的類?

一旦我有了,是否可以添加一個打印出每個類屬性的方法?我聽說過ToString(),但我不確定如何使用它。

一些示例代碼將非常有用,因爲我是一名學生,並試圖學習如何使用C#。謝謝!

+0

看起來像作業...投票關閉 – 2011-01-22 22:05:36

+0

我只需要幫助寫的HSLColor類和RGBColor類 – PAPA78 2011-01-22 22:11:34

回答

2

當您發佈「問題」,要求他人爲您編寫代碼時,人們會很惱火。很多來自新用戶的問題似乎要求這個,你甚至這樣做明確。希望這可以解釋您從其他用戶遇到的一些負面反應,無論是投票表決,投票結束還是刪除問題。我希望這裏沒有給你這樣一個消極的經歷,你被趕走了。將來你會發現,如果你顯示一些先試圖幫助自己的證據,那麼人們更願意幫助你。向我們展示一些你已經編寫的代碼(但不能工作),或者提出一些可能的方法來嘗試自己解決問題。大多數問題不是「太微不足道」,而不是真正的問題。我們不是代碼編寫服務,但我們仍然樂於提供幫助。

這就是說,我會盡量繼續回答問題,正如我在評論中所做的一樣。如果僅僅是因爲我喜歡編碼處理顏色和色彩空間轉換的問題。如何在色彩空間之間進行轉換的問題已經在SO上多次提出並回答。例如,我(和其他幾個人)提供了一種算法(用幾種不同的語言)here。將其中任何一種轉換爲您選擇的任何語言都應該很簡單。至於「如何編寫一個類來表示這些色彩空間中的值」,這非常簡單。谷歌搜索也會得出幾個已經完成了相同事情的人的結果。就個人而言,我建議創建一個結構,而不是一個類,因爲它是一個非常輕量級的對象,顏色值是不可變的(意味着它們不會改變)。這是一個完美的結構適合,如果你想更多的解釋差異,你可以找到that questionalready been askedanswered 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,自己編寫代碼,並嘗試幾種不同的變體。確保你瞭解它是如何工作的,我已經完成了什麼,以及如何自己做到這一點。祝你好運!