private void Form1_Load(object sender, EventArgs e)
{
img = pictureBox1.Image = Image.FromFile("8.jpg");
}
Image img;
private void button1_Click(object sender, EventArgs e)
{
using (Graphics g = pictureBox2.CreateGraphics())
{
g.Clear(pictureBox2.BackColor);
using (Image tmp = SetGamma(img.Clone() as Image, hsbRed.Value, hsbGreen.Value, hsbBlue.Value))
pictureBox2.Image = new Bitmap(tmp);
}
}
/// <summary>
/// 伽马曲线调整
/// </summary>
/// <param name="img"></param>
/// <param name="red"></param>
/// <param name="green"></param>
/// <param name="blue"></param>
public Image SetGamma(Image img, double red, double green, double blue)
{
using (Bitmap tmp = img as Bitmap)
{
Color c;
byte[] rG = CreateGammaArray(red);
byte[] gG = CreateGammaArray(green);
byte[] bG = CreateGammaArray(blue);
for (int i = 0; i < tmp.Width; i++)
{
for (int j = 0; j < tmp.Height; j++)
{
c = tmp.GetPixel(i, j);
tmp.SetPixel(i, j, Color.FromArgb(rG[c.R], gG[c.G], bG[c.B]));
}
}
rG = gG = bG = null;
return tmp.Clone() as Bitmap;
}
}
/// <summary>
/// 获取曲线数组
/// </summary>
/// <param name="color">色彩</param>
/// <returns>数组</returns>
private byte[] CreateGammaArray(double color)
{
byte[] gammaArray = new byte[256];
for (int i = 1; i < 256; i++)
gammaArray[i] = (byte)Math.Min(255, (int)((255.0 * Math.Pow(i / 255.0, 1.0 / color)) + 0.5));
return gammaArray;
}
private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
label5.Text = string.Format("Red={0},Green={1},Blue={2}", hsbRed.Value, hsbGreen.Value, hsbBlue.Value);
button1.PerformClick();
}
private void hsbGreen_Scroll(object sender, ScrollEventArgs e)
{
label5.Text = string.Format("Red={0},Green={1},Blue={2}", hsbRed.Value, hsbGreen.Value, hsbBlue.Value);
button1.PerformClick();
}
private void hsbBlue_Scroll(object sender, ScrollEventArgs e)
{
label5.Text = string.Format("Red={0},Green={1},Blue={2}", hsbRed.Value, hsbGreen.Value, hsbBlue.Value);
button1.PerformClick();
}