都知道光的三原色吧。他们是:红、绿、蓝。所有的颜色都可以通过这三个颜色搭配而成。通过他们的像素值的不断变化,就可以得到五颜六色了。
下面看看怎么做到的:
//当鼠标进入红色区域时,该区域获得焦点 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.