/**////<summary> ///以浮雕方式显示图像 ///</summary> ///<param name="SImage">源图像</param> ///<returns>浮雕效果处理后的图像</returns> public Bitmap fuDiao(Image SImage) ...{ int Height = SImage.Height; int Width = SImage.Width; Bitmap bitmap =new Bitmap(Width, Height); Bitmap MyBitmap = (Bitmap) SImage; Color pixel1, pixel2; for (int x =0; x < Width -1; x++) ...{ for (int y =0; y < Height -1; y++) ...{ int r =0, g =0, b =0; pixel1 = MyBitmap.GetPixel(x, y); pixel2 = MyBitmap.GetPixel(x +1, y +1); r = pixel1.R - pixel2.R +128; g = pixel1.G - pixel2.G +128; b = pixel1.B - pixel2.B +128; if (r >255) r =255; if (r <0) r =0; if (g >255) g =255; if (g <0) g =0; if (b >255) b =255; if (b <0) b =0; bitmap.SetPixel(x, y, Color.FromArgb(r, g, b)); } } return bitmap; }
/**////<summary> /// 以黑白方式显示图像 ///</summary> ///<param name="SImage">源图像</param> ///<param name="iType">黑白处理的方法参数,0-平均值法;1-最大值法;2-加权平均值法</param> ///<returns></returns> public Bitmap heiBai(Image SImage, int iType) ...{ int Height = SImage.Height; int Width = SImage.Width; Bitmap bitmap =new Bitmap(Width, Height); Bitmap MyBitmap = (Bitmap) SImage; Color pixel; for (int x =0; x < Width; x++) for (int y =0; y < Height; y++) ...{ pixel = MyBitmap.GetPixel(x, y); int r, g, b, Result =0; r = pixel.R; g = pixel.G; b = pixel.B; switch (iType) ...{ case0://平均值法 Result = ((r + g + b) /3); break; case1://最大值法 Result = r > g ? r : g; Result = Result > b ? Result : b; break; case2://加权平均值法 Result = ((int) (0.7* r) + (int) (0.2* g) + (int) (0.1* b)); break; } bitmap.SetPixel(x, y, Color.FromArgb(Result, Result, Result)); } return bitmap; }
/**////<summary> /// 以柔化方式显示图像 ///</summary> ///<Note>高斯模板法</Note> ///<param name="SImage">源图像</param> ///<returns>柔化处理后的图像</returns> public Bitmap rouHua(Image SImage) ...{ int Height = SImage.Height; int Width = SImage.Width; Bitmap bitmap =new Bitmap(Width, Height); Bitmap MyBitmap = (Bitmap) SImage; 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; //int a=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)); } return bitmap; }
/**////<summary> /// 以锐化方式显示图像 ///</summary> ///<Note>拉普拉斯模板法</Note> ///<param name="SImage">源图像</param> ///<returns>锐化处理后的图像</returns> public Bitmap ruiHua(Image SImage) ...{ int Height = SImage.Height; int Width = SImage.Width; Bitmap bitmap =new Bitmap(Width, Height); Bitmap MyBitmap = (Bitmap) SImage; 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; int a =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 * 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; bitmap.SetPixel(x -1, y -1, Color.FromArgb(r, g, b)); } return bitmap; }
/**////<summary> /// 以雾化方式显示图像 ///</summary> ///<param name="SImage"></param> ///<returns></returns> public Bitmap wuHua(Image SImage) ...{ int Height = SImage.Height; int Width = SImage.Width; Bitmap bitmap =new Bitmap(Width, Height); Bitmap MyBitmap = (Bitmap) SImage; 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 = MyBitmap.GetPixel(dx, dy); bitmap.SetPixel(x, y, pixel); } return bitmap; }