2013-08-05 190 views
2

在我的程序中,我需要循環瀏覽可用的已知用戶顏色,以便看起來平滑自然,就像DWM顏色滑塊一樣。C#循環遍歷顏色?

顏色必須被轉換到一個uint藏漢

private static uint ColorToBgra(Color  
{ 
    return (uint) 
    (color.B | (color.G << 8) | (color.R << 16) | (color.A << 24)); 
} 

然後將其設置。我嘗試將它設置爲白色,其中uint爲0,然後每0.1秒增加+1,但不平滑,並且在約250 uint的時間間隔內它會變黑,然後繼續。 this會爲我工作嗎?我嘗試過,但沒有。

任何想法?

+2

你的代碼讓我的眼睛流血。 –

+2

順便說一句,'Color.ToArgb()'與上面的'ColorToBgra()'方法相同。 –

+0

你從哪裏找到這段代碼?我認爲'Blue'顏色應該從'color.B'右移。據我所知,顏色元素的順序是「B G R A」而不是「A R G B」。 –

回答

1

這可能會把你推向正確的方向嗎?

// w goes from 0 to 100 
private static Color spectrumColor(int w) 
{ 
    float r = 0.0f; 
    float g = 0.0f; 
    float b = 0.0f; 

    w = w % 100; 

    if (w < 17) { 
    r = -(w - 17.0f)/17.0f; 
    b = 1.0f; 
    } else if (w < 33) { 
    g = (w - 17.0f)/(33.0f - 17.0f); 
    b = 1.0f; 
    } else if (w < 50) { 
    g = 1.0f; 
    b = -(w - 50.0f)/(50.0f - 33.0f); 
    } else if (w < 67) { 
    r = (w - 50.0f)/(67.0f - 50.0f); 
    g = 1.0f; 
    } else if (w < 83) { 
    r = 1.0f; 
    g = -(w - 83.0f)/(83.0f - 67.0f); 
    } else { 
    r = 1.0f; 
    b = (w - 83.0f)/(100.0f - 83.0f); 
    } 

    return Color.FromArgb((int)r * 255, (int)g * 255, (int)b * 255); 
} 
+0

我對編程頗爲陌生,我不知道如何將其實現到我的程序中,有什麼幫助? – Trontor

+0

我編輯了我的答案,因此它可以與System.Drawing.Color而不是XNA的顏色一起使用。 – Codecat