搜索
您的当前位置:首页正文

C#代码各种图像处理方法

来源:爱够旅游网


各种图像处理方法 底片效果

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, \"信息提示\"); } }

友情提示:范文可能无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用,感谢您的下载!

因篇幅问题不能全部显示,请点此查看更多更全内容

Top