2012-03-05 73 views
0

即時嘗試旋轉繪製功能的顏色,任何一個做了類似的,可以幫助使它看起來不錯。旋轉顏色?

byte r = 200; 
    byte g = 100; 
    byte b = 050; 

    private int x = 1; 

    private void timer_elapsed(object sender, EventArgs e) 
    { 
     x++; 

     if(x % 3 == 0) 
     r++; 

     if(x % 5 == 0) 
     g++; 

     if(x % 2 == 0) 
     b++; 

     if (x > 100) 
      x = 1; 

     if (r >= 254) 
      r = 0; 
     if (g >= 254) 
      g = 0; 
     if (b >= 254) 
      b = 0; 

     inkCanvas1.DefaultDrawingAttributes.Color = Color.FromArgb(255, r, g, b); 
    } 

編輯

買旋轉的色彩我的意思是我希望我的畫筆,從紅色漸變爲藍色,從藍色到綠色,然後黃色和回沖,四做索姆更期待在這個這就是我想要的

254,0,0  = red 
254,0,254 = pink 
0,0,254  = blue 
0,254,254 = cyan 
0,254,0 = green 
254,254,0 = yellow 
254,0,0 = red 

所以我看着做簡單的if語句在這裏還是我可以以更聰明的方式做到這一點?如果你想實現,在一個平穩的方式你的顏色變化,你應該考慮使用HSV色彩空間


編輯

我目前的邏輯是這樣的

byte r = 255; 
    byte g = 0; 
    byte b = 0; 


    private void timer_elapsed(object sender, EventArgs e) 
    { 
     //going from red to pink 
     if (r == 255 && g == 0 && b <= 254) 
      b++; 
     //going from pink to blue 
     if (r >= 1 && g == 0 && b == 255) 
      r--; 
     //going from blue to cyan 
     if (r == 0 && g <= 254 && b == 255) 
      g++; 
     //going from cyan to green 
     if (r == 0 && g == 255 && b >= 1) 
      b--; 
     //going from green to yellow 
     if (r <= 254 && g == 255 && b == 0) 
      r++; 
     //going from yellow back to red 
     if (r == 255 && g >= 1 && b == 0) 
      g--; 

     inkCanvas1.DefaultDrawingAttributes.Color = Color.FromArgb(255, r, g, b); 
    } 
+1

「旋轉顏色」是什麼意思?你能提供一些例子嗎? – BlackBear 2012-03-05 20:45:21

+0

@Darkmage:你到底意味着什麼? – Tigran 2012-03-05 20:45:49

+0

我更新了我的帖子。 – Darkmage 2012-03-05 21:00:35

回答

2

。實際上,色調值(H)是以度數衡量的,當你增加這個值而離開其他值時,會導致旋轉的顏色。

Here's一種將HSV空間轉換爲默認顏色的方法。我認爲,你應該能夠將VB代碼轉換爲C#。

+0

+1更多信息:http://en.wikipedia.org/wiki/HSL_and_HSV – 2012-03-05 22:04:46