都知道光的三原色吧。他們是:紅、綠、藍。所有的顏色都可以通過這三個顏色搭配而成。通過他們的像素值的不斷變化,就可以得到五顏六色了。
下面看看怎麼做到的:
//當鼠標進入紅色區域時,該區域獲得焦點 private void pbRed_MouseEnter(object sender, EventArgs e) { //將控件的類型轉換成我們需要的PictureBox類型 PictureBox pb = (PictureBox)sender; //讓這個PictureBox控件獲得焦點 pb.Focus(); } /// <summary> /// 在窗體加載的時候,註冊事件,當某事件發生的時候調用相應的方法來處理這個事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_Load(object sender, EventArgs e) { this.pbRed.MouseWheel += new MouseEventHandler(pbRed_MouseWheel); this.pbGreen.MouseWheel += new MouseEventHandler(pbRed_MouseWheel); this.pbBlue.MouseWheel += new MouseEventHandler(pbRed_MouseWheel); } //定義三個字段(全局變量) int red, green, blue; /// <summary> /// 鼠標滾動的時候,調色板上的顏色發生變化 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void pbRed_MouseWheel(object sender, MouseEventArgs e) { PictureBox pb = (PictureBox)sender; //判斷鼠標滾動的方向 //若是向前,則相應顏色的像素值增加 if (e.Delta > 0) { //判斷鼠標在哪個顏色區域滾動,若是紅色區域則紅色像素值增加,直到加到255,就不在變化 if (pb.BackColor == Color.Red) { if (red < 255) { red++; } //設置紅色此時的像素值 this.lblRed.Text = red.ToString(); } if (pb.BackColor == Color.Green) { if (green < 255) { green++; } this.lblGreen.Text = green.ToString(); } if (pb.BackColor == Color.Blue) { if (blue < 255) { blue++; } this.lblBlue.Text = blue.ToString(); } //設置調色板的顏色 this.pbMixColor.BackColor = Color.FromArgb(int.Parse(lblRed.Text), int.Parse(lblGreen.Text), int.Parse(lblBlue.Text)); } else { if (pb.BackColor == Color.Red) { if (red > 0) { red--; } this.lblRed.Text = red.ToString(); } if (pb.BackColor == Color.Green) { if (green > 0) { green--; } this.lblGreen.Text = green.ToString(); } if (pb.BackColor == Color.Blue) { if (blue > 0) { blue--; } this.lblBlue.Text = blue.ToString(); } this.pbMixColor.BackColor = Color.FromArgb(int.Parse(lblRed.Text), int.Parse(lblGreen.Text), int.Parse(lblBlue.Text)); } }
看看效果吧!
左邊的三種顏色就是光的三原色,而中間的紫色就是通過調節三原色的像素值調配出來的。
注意:每一種顏色的最小值是0,最大值是255.