1.效果图:
       图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果         图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
                            (曝光效果)                                                       (霓虹效果)

2.实现原理:
        曝光效果:逆转值小于128的R、G、B分量值,产生正片和负片混合的效果。
        霓虹效果:用来描绘图像的轮廓,勾画颜色变化的边缘,加强其过度效果,产生轮廓发光的效果。
                      主要是根据当前像素与其右方和下方像素的梯度运算,然后将结果值作为当前像素值,
                      即将原图像当前像素的R、G、B分量与其右方和下方像素做梯度运算(差的平方和的平方根),
                      然后将梯度值作为处理后像素的R、G、B的三个分量。
                      [  result = Math.Sqrt( (src-right)*(src-right) + (src-bottom)*(src-bottom) )  ]

3.实现代码:

        public static Image Solarize(Image img)
 2                    int width = img.Width;
 4图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            int height = img.Height;
 5图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            Bitmap bmp = new Bitmap(img);
 6图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
 7图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            Rectangle rect = new Rectangle(0, 0, width, height);
 8图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            ImageLockMode flag = ImageLockMode.ReadWrite;
 9图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            PixelFormat format = PixelFormat.Format32bppArgb;
10图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            BitmapData data = bmp.LockBits(rect, flag, format);
11图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
12图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            IntPtr ptr = data.Scan0;
13图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
14图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            int numBytes = width * height * 4;
15图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            byte[] rgbValues = new byte[numBytes];
16图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            Marshal.Copy(ptr, rgbValues, 0, numBytes);
17图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
18图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            for (int i = 0; i < rgbValues.Length; i += 4)
19                            if (rgbValues[i] < 128)
21图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    rgbValues[i] = (byte)(255 - rgbValues[i]);
22图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                if (rgbValues[i + 1] < 128)
23图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    rgbValues[i + 1] = (byte)(255 - rgbValues[i + 1]);
24图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                if (rgbValues[i + 2] < 128)
25图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    rgbValues[i + 2] = (byte)(255 - rgbValues[i + 2]);
26图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            }
27图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
28图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            Marshal.Copy(rgbValues, 0, ptr, numBytes);
29图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            bmp.UnlockBits(data);
30图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
31图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            return (Image)bmp;
32图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果        }

        public static Image GlowingEdge(Image img)
 2                    int width = img.Width;
 4图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            int height = img.Height;
 5图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
 6图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            Bitmap oldImg = (Bitmap)img;
 7图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            Bitmap newImg = new Bitmap(width, height);
 8图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
 9图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            Color c1, c2, c3;
10图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            int rr, gg, bb;
11图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            for (int i = 0; i < width - 1; i++)
12                            for (int j = 0; j < height - 1; j++)
14                                    int r = 0, g = 0, b = 0;
16图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
17图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    c1 = oldImg.GetPixel(i, j);
18图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    c2 = oldImg.GetPixel(i + 1, j);
19图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    c3 = oldImg.GetPixel(i, j + 1);
20图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
21图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    rr = (c1.R - c2.R) * (c1.R - c2.R) + (c1.R - c3.R) * (c1.R - c3.R);
22图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    gg = (c1.G - c2.G) * (c1.G - c2.G) + (c1.G - c3.G) * (c1.G - c3.G);
23图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    bb = (c1.B - c2.B) * (c1.B - c2.B) + (c1.B - c3.B) * (c1.B - c3.B);
24图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
25图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    r = (int)(3 * Math.Sqrt(rr));
26图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    g = (int)(3 * Math.Sqrt(gg));
27图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    b = (int)(3 * Math.Sqrt(bb));
28图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
29图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    r = r < 0 ? 0 : r;
30图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    r = r > 255 ? 255 : r;
31图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    g = g < 0 ? 0 : g;
32图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    g = g > 255 ? 255 : g;
33图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    b = b < 0 ? 0 : b;
34图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    b = b > 255 ? 255 : b;
35图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
36图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    newImg.SetPixel(i, j, Color.FromArgb(r, g, b));
37图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                }
38图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            }
39图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            return newImg;
40图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果        }

 

4.说明:
        曝光效果采用的是LockBits方法,霓虹效果采用的是GetPixel、SetPixel方法。
        可比较这两种方法在处理图像上的效率问题。

1.效果图:
       图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果         图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
                            (曝光效果)                                                       (霓虹效果)

2.实现原理:
        曝光效果:逆转值小于128的R、G、B分量值,产生正片和负片混合的效果。
        霓虹效果:用来描绘图像的轮廓,勾画颜色变化的边缘,加强其过度效果,产生轮廓发光的效果。
                      主要是根据当前像素与其右方和下方像素的梯度运算,然后将结果值作为当前像素值,
                      即将原图像当前像素的R、G、B分量与其右方和下方像素做梯度运算(差的平方和的平方根),
                      然后将梯度值作为处理后像素的R、G、B的三个分量。
                      [  result = Math.Sqrt( (src-right)*(src-right) + (src-bottom)*(src-bottom) )  ]

3.实现代码:

        public static Image Solarize(Image img)
 2                    int width = img.Width;
 4图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            int height = img.Height;
 5图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            Bitmap bmp = new Bitmap(img);
 6图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
 7图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            Rectangle rect = new Rectangle(0, 0, width, height);
 8图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            ImageLockMode flag = ImageLockMode.ReadWrite;
 9图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            PixelFormat format = PixelFormat.Format32bppArgb;
10图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            BitmapData data = bmp.LockBits(rect, flag, format);
11图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
12图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            IntPtr ptr = data.Scan0;
13图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
14图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            int numBytes = width * height * 4;
15图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            byte[] rgbValues = new byte[numBytes];
16图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            Marshal.Copy(ptr, rgbValues, 0, numBytes);
17图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
18图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            for (int i = 0; i < rgbValues.Length; i += 4)
19                            if (rgbValues[i] < 128)
21图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    rgbValues[i] = (byte)(255 - rgbValues[i]);
22图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                if (rgbValues[i + 1] < 128)
23图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    rgbValues[i + 1] = (byte)(255 - rgbValues[i + 1]);
24图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                if (rgbValues[i + 2] < 128)
25图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    rgbValues[i + 2] = (byte)(255 - rgbValues[i + 2]);
26图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            }
27图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
28图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            Marshal.Copy(rgbValues, 0, ptr, numBytes);
29图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            bmp.UnlockBits(data);
30图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
31图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            return (Image)bmp;
32图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果        }

        public static Image GlowingEdge(Image img)
 2                    int width = img.Width;
 4图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            int height = img.Height;
 5图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
 6图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            Bitmap oldImg = (Bitmap)img;
 7图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            Bitmap newImg = new Bitmap(width, height);
 8图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
 9图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            Color c1, c2, c3;
10图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            int rr, gg, bb;
11图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            for (int i = 0; i < width - 1; i++)
12                            for (int j = 0; j < height - 1; j++)
14                                    int r = 0, g = 0, b = 0;
16图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
17图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    c1 = oldImg.GetPixel(i, j);
18图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    c2 = oldImg.GetPixel(i + 1, j);
19图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    c3 = oldImg.GetPixel(i, j + 1);
20图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
21图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    rr = (c1.R - c2.R) * (c1.R - c2.R) + (c1.R - c3.R) * (c1.R - c3.R);
22图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    gg = (c1.G - c2.G) * (c1.G - c2.G) + (c1.G - c3.G) * (c1.G - c3.G);
23图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    bb = (c1.B - c2.B) * (c1.B - c2.B) + (c1.B - c3.B) * (c1.B - c3.B);
24图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
25图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    r = (int)(3 * Math.Sqrt(rr));
26图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    g = (int)(3 * Math.Sqrt(gg));
27图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    b = (int)(3 * Math.Sqrt(bb));
28图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
29图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    r = r < 0 ? 0 : r;
30图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    r = r > 255 ? 255 : r;
31图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    g = g < 0 ? 0 : g;
32图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    g = g > 255 ? 255 : g;
33图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    b = b < 0 ? 0 : b;
34图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    b = b > 255 ? 255 : b;
35图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果
36图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                    newImg.SetPixel(i, j, Color.FromArgb(r, g, b));
37图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果                }
38图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            }
39图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果            return newImg;
40图像处理--曝光、霓虹(照亮边缘效果)
    

图像处理:曝光、霓虹(照亮边缘)效果        }

 

4.说明:
        曝光效果采用的是LockBits方法,霓虹效果采用的是GetPixel、SetPixel方法。
        可比较这两种方法在处理图像上的效率问题。

相关文章:

  • 2022-12-23
  • 2021-09-08
  • 2022-12-23
  • 2021-06-16
  • 2021-08-13
  • 2021-11-12
  • 2021-10-31
  • 2021-12-09
猜你喜欢
  • 2022-12-23
  • 2021-10-02
  • 2021-08-10
  • 2021-04-17
  • 2021-08-15
相关资源
相似解决方案