十一、GDI+实例——底片效果
bool istrue = false;
Bitmap bmp;
private void button1_Click(object sender, EventArgs e)
{
if (!istrue)
{
bmp = new Bitmap(Application.StartupPath + "//1.jpg");
Color color;
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
color = bmp.GetPixel(i, j);
Color resultColor = Color.FromArgb(255, 255 - color.R, 255 - color.G, 255 - color.B);
bmp.SetPixel(i, j, resultColor);
}
}
Graphics g = panel2.CreateGraphics();
g.DrawImage(bmp, panel2.ClientRectangle);
g.Dispose();
istrue = true;
// bmp.Dispose();
}
}
private void panel1_Paint(object sender, PaintEventArgs e)
{
Bitmap bmp = new Bitmap(Application.StartupPath + "//1.jpg");
Graphics g = panel1.CreateGraphics();
g.DrawImage(bmp, panel1.ClientRectangle);
g.Dispose();
bmp.Dispose();
}
private void button2_Click(object sender, EventArgs e)
{
if (istrue)
{
Color color;
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
color = bmp.GetPixel(i, j);
Color resultColor = Color.FromArgb(255, 255 - color.R, 255 - color.G, 255 - color.B);
bmp.SetPixel(i, j, resultColor);
}
}
Graphics g = panel3.CreateGraphics();
g.DrawImage(bmp, panel3.ClientRectangle);
g.Dispose();
bmp.Dispose();
istrue = false;
}
}
底片效果其实就是将图像像素点上的颜色分量用255减去颜色分量得到的
Color resultColor = Color.FromArgb(255, 255 - color.R, 255 - color.G, 255 - color.B);
还原底片则用255减去底片像素点上的颜色分量值就可以了
Color resultColor = Color.FromArgb(255, 255 - color.R, 255 - color.G, 255 - color.B);
第一幅图为原图,第二幅图为底片效果图,第三幅图为底片效果恢复图
本人也在学习GDI+,写得比较简单,让高手见笑了。欢迎高手给我指点
QQ:125941562
2932

被折叠的 条评论
为什么被折叠?



