各种图像处理方法 底片效果
private void button1_Click(object sender, EventArgs e) {
//以底片效果显示图像 try {
int Height = this.pictureBox1.Image.Height; int Width = this.pictureBox1.Image.Width;
Bitmap newbitmap = new Bitmap(Width, Height); Bitmap oldbitmap = (Bitmap)this.pictureBox1.Image; Color pixel;
for (int x = 1; x < Width; x++) {
for (int y = 1; y < Height; y++) {
int r, g, b;
pixel = oldbitmap.GetPixel(x, y); r = 255 - pixel.R; g = 255 - pixel.G; b = 255 - pixel.B;
newbitmap.SetPixel(x, y, Color.FromArgb(r, g, b)); } }
this.pictureBox1.Image = newbitmap; }
catch (Exception ex) {
MessageBox.Show(ex.Message, \"信息提MessageBoxIcon.Information); } }
柔化效果
private void button1_Click(object sender, EventArgs e) {
//以柔化效果显示图像 try {
int Height = this.pictureBox1.Image.Height; int Width = this.pictureBox1.Image.Width; Bitmap bitmap = new Bitmap(Width, Height);
Bitmap MyBitmap = (Bitmap)this.pictureBox1.Image;
1 / 7
示\MessageBoxButtons.OK,
Color pixel; //高斯模板
int[] Gauss ={ 1, 2, 1, 2, 4, 2, 1, 2, 1 }; for (int x = 1; x < Width - 1; x++) for (int y = 1; y < Height - 1; y++) {
int r = 0, g = 0, b = 0; int Index = 0;
for (int col = -1; col <= 1; col++) for (int row = -1; row <= 1; row++) {
pixel = MyBitmap.GetPixel(x + row, y + col); r += pixel.R * Gauss[Index]; g += pixel.G * Gauss[Index]; b += pixel.B * Gauss[Index]; Index++; }
r /= 16; g /= 16; b /= 16;
//处理颜色值溢出 r = r > 255 ? 255 : r; r = r < 0 ? 0 : r;
g = g > 255 ? 255 : g; g = g < 0 ? 0 : g; b = b > 255 ? 255 : b; b = b < 0 ? 0 : b;
bitmap.SetPixel(x - 1, y - 1, Color.FromArgb(r, g, b)); }
this.pictureBox1.Image = bitmap; }
catch (Exception ex) {
MessageBox.Show(ex.Message, \"信息提示\"); } }
锐化效果
private void button1_Click(object sender, EventArgs e) {
//以锐化效果显示图像 try {
int Height = this.pictureBox1.Image.Height;
int Width = this.pictureBox1.Image.Width;
Bitmap newBitmap = new Bitmap(Width, Height); Bitmap oldBitmap = (Bitmap)this.pictureBox1.Image; Color pixel; //拉普拉斯模板
int[] Laplacian ={ -1, -1, -1, -1, 9, -1, -1, -1, -1 }; for (int x = 1; x < Width - 1; x++) for (int y = 1; y < Height - 1; y++) {
int r = 0, g = 0, b = 0; int Index = 0;
for (int col = -1; col <= 1; col++) for (int row = -1; row <= 1; row++) {
pixel = oldBitmap.GetPixel(x + row, y + col); r += pixel.R * Laplacian[Index]; g += pixel.G * Laplacian[Index]; b += pixel.B * Laplacian[Index]; Index++; }
//处理颜色值溢出 r = r > 255 ? 255 : r; r = r < 0 ? 0 : r;
g = g > 255 ? 255 : g; g = g < 0 ? 0 : g; b = b > 255 ? 255 : b; b = b < 0 ? 0 : b;
newBitmap.SetPixel(x - 1, y - 1, Color.FromArgb(r, g, b)); }
this.pictureBox1.Image = newBitmap; }
catch (Exception ex) {
MessageBox.Show(ex.Message, \"信息提示\"); } }
雾化效果
private void button1_Click(object sender, EventArgs e) {
//以雾化效果显示图像 try {
int Height = this.pictureBox1.Image.Height; int Width = this.pictureBox1.Image.Width;
Bitmap newBitmap = new Bitmap(Width, Height); Bitmap oldBitmap = (Bitmap)this.pictureBox1.Image; Color pixel;
for (int x = 1; x < Width - 1; x++) for (int y = 1; y < Height - 1; y++) {
System.Random MyRandom = new Random(); int k = MyRandom.Next(123456); //像素块大小
int dx = x + k % 19; int dy = y + k % 19; if (dx >= Width) dx = Width - 1; if (dy >= Height) dy = Height - 1;
pixel = oldBitmap.GetPixel(dx, dy); newBitmap.SetPixel(x, y, pixel); }
this.pictureBox1.Image = newBitmap; }
catch (Exception ex) {
MessageBox.Show(ex.Message, \"信息提示\"); } }
光照效果
private void button1_Click(object sender, EventArgs e) {
//以光照效果显示图像
Graphics MyGraphics = this.pictureBox1.CreateGraphics(); MyGraphics.Clear(Color.White);
Bitmap MyBmp = new Bitmap(this.pictureBox1.Image, this.pictureBox1.Height);
int MyWidth = MyBmp.Width; int MyHeight = MyBmp.Height;
Bitmap MyImage = MyBmp.Clone(new RectangleF(0, 0, System.Drawing.Imaging.PixelFormat.DontCare); int A = Width / 2; int B = Height / 2;
//MyCenter图片中心点,发亮此值会让强光中心发生偏移 Point MyCenter = new Point(MyWidth / 2, MyHeight / 2); //R强光照射面的半径,即”光晕”
int R = Math.Min(MyWidth / 2, MyHeight / 2);
this.pictureBox1.Width, MyWidth, MyHeight),
for (int i = MyWidth - 1; i >= 1; i--) {
for (int j = MyHeight - 1; j >= 1; j--) {
float MyLength = (float)Math.Sqrt(Math.Pow((i - MyCenter.X), 2) + Math.Pow((j - MyCenter.Y), 2));
//如果像素位于”光晕”之内 if (MyLength < R) {
Color MyColor = MyImage.GetPixel(i, j); int r, g, b;
//220亮度增加常量,该值越大,光亮度越强 float MyPixel = 220.0f * (1.0f - MyLength / R); r = MyColor.R + (int)MyPixel;
r = Math.Max(0, Math.Min(r, 255)); g = MyColor.G + (int)MyPixel;
g = Math.Max(0, Math.Min(g, 255)); b = MyColor.B + (int)MyPixel;
b = Math.Max(0, Math.Min(b, 255)); //将增亮后的像素值回写到位图
Color MyNewColor = Color.FromArgb(255, r, g, b); MyImage.SetPixel(i, j, MyNewColor); } }
//重新绘制图片
MyGraphics.DrawImage(MyImage, new Rectangle(0, 0, MyWidth, MyHeight)); } } }
垂直百叶窗
private void button1_Click(object sender, EventArgs e) {
//垂直百叶窗显示图像 try {
MyBitmap = (Bitmap)this.pictureBox1.Image.Clone(); int dw = MyBitmap.Width / 30; int dh = MyBitmap.Height;
Graphics g = this.pictureBox1.CreateGraphics(); g.Clear(Color.Gray);
Point[] MyPoint = new Point[30];
for (int x = 0; x < 30; x++) {
MyPoint[x].Y = 0;
MyPoint[x].X = x * dw; }
Bitmap bitmap = new Bitmap(MyBitmap.Width, MyBitmap.Height); for (int i = 0; i < dw; i++) {
for (int j = 0; j < 30; j++) {
for (int k = 0; k < dh; k++) {
bitmap.SetPixel(MyPoint[j].X + i, MyPoint[j].Y + k,
MyBitmap.GetPixel(MyPoint[j].X + i, MyPoint[j].Y + k)); } }
this.pictureBox1.Refresh();
this.pictureBox1.Image = bitmap; System.Threading.Thread.Sleep(100); } }
catch (Exception ex) {
MessageBox.Show(ex.Message, \"信息提示\"); } }
水平百叶窗
private void button3_Click(object sender, EventArgs e) {
//水平百叶窗显示图像 try {
MyBitmap = (Bitmap)this.pictureBox1.Image.Clone(); int dh = MyBitmap.Height / 20; int dw = MyBitmap.Width;
Graphics g = this.pictureBox1.CreateGraphics(); g.Clear(Color.Gray);
Point[] MyPoint = new Point[20]; for (int y = 0; y < 20; y++) {
MyPoint[y].X = 0; MyPoint[y].Y = y * dh; }
Bitmap bitmap = new Bitmap(MyBitmap.Width, MyBitmap.Height); for (int i = 0; i < dh; i++) {
for (int j = 0; j < 20; j++) {
for (int k = 0; k < dw; k++) {
bitmap.SetPixel(MyPoint[j].X + k, MyPoint[j].Y + i, MyBitmap.GetPixel(MyPoint[j].X + k, MyPoint[j].Y + i)); } }
this.pictureBox1.Refresh();
this.pictureBox1.Image = bitmap; System.Threading.Thread.Sleep(100); } }
catch (Exception ex) {
MessageBox.Show(ex.Message, \"信息提示\"); } }
友情提示:范文可能无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用,感谢您的下载!
因篇幅问题不能全部显示,请点此查看更多更全内容