日期:2014-05-18 浏览次数:21025 次
private void BlurAndSharpen_Click(object sender, System.EventArgs e) { Graphics graphics = this.CreateGraphics(); graphics.Clear(Color.White); graphics.ScaleTransform(0.8f, 0.8f); Bitmap image = new Bitmap("snike.bmp"); int Width = image.Width; int Height = image.Height; //image2:进行锐化处理 Bitmap image2 = (Bitmap)image.Clone(); Color colorTemp; Color[,] color = new Color[3, 3]; //绘制原图 graphics.DrawImage( image, new Rectangle(0, 0, Width, Height)); for (int i = 1; i < Width - 2; i++) { for (int j = 1; j < Height - 2; j++) { //访问周围9个点的RGB值 color[0, 0] = image.GetPixel(i - 1, j - 1); color[0, 1] = image.GetPixel(i - 1, j); color[0, 2] = image.GetPixel(i - 1, j + 1); color[1, 0] = image.GetPixel(i, j - 1); color[1, 1] = image.GetPixel(i, j); color[1, 2] = image.GetPixel(i, j + 1); color[2, 0] = image.GetPixel(i + 1, j - 1); color[2, 1] = image.GetPixel(i + 1, j); color[2, 2] = image.GetPixel(i + 1, j + 1); int rSum = 0; int gSum = 0; int bSum = 0; //分别求出周围9个点的R、G、B之和 for (int n = 0; n < 3; n++) for (int nn = 0; nn < 3; nn++) { rSum += color[n, nn].R; gSum += color[n, nn].G; bSum += color[n, nn].B; } //用RGB的平均值做为当前点的RGB值 colorTemp = Color.FromArgb(255, (int)(rSum / 9), (int)(gSum / 9), (int)(bSum / 9)); //将计算后的RGB值回写到位图 image.SetPixel(i, j, colorTemp); } //绘制经过平滑处理的效果图 graphics.DrawImage( image, new Rectangle(Width, 0, Width, Height)); } //进行锐化处理 Color colorLeft, colornow; //常量dep:锐化系数,此值越大,锐化效果越明显 float dep = 0.550f; for (int i = 1; i < Width - 1; i++) { for (int j = 1; j < Height - 1; j++) { colornow = image2.GetPixel(i, j); colorLeft = image2.GetPixel(i - 1, j - 1); float r = colornow.R + (colornow.R - colorLeft.R * dep); r = Math.Min(255, Math.Max(0, r)); float g = colornow.G + (colornow.G - colorLeft.G * dep); g = Math.Min(255, Math.Max(0, g)); float b = colornow.B + (colornow.B - colorLeft.B * dep); b = Math.Min(25