首页 > 其他 > 详细

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

时间:2014-06-25 18:13:59      阅读:471      评论:0      收藏:0      [点我收藏+]

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

Posted on 2008-10-31 15:49 parker 阅读(770) 评论(2) 编辑 收藏

1.效果图:
       bubuko.com,布布扣         bubuko.com,布布扣
                            (曝光效果)                                                       (霓虹效果)

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

3.实现代码:

bubuko.com,布布扣
 1bubuko.com,布布扣        public static Image Solarize(Image img)
 2bubuko.com,布布扣        {
 3bubuko.com,布布扣            int width = img.Width;
 4bubuko.com,布布扣            int height = img.Height;
 5bubuko.com,布布扣            Bitmap bmp = new Bitmap(img);
 6bubuko.com,布布扣
 7bubuko.com,布布扣            Rectangle rect = new Rectangle(0, 0, width, height);
 8bubuko.com,布布扣            ImageLockMode flag = ImageLockMode.ReadWrite;
 9bubuko.com,布布扣            PixelFormat format = PixelFormat.Format32bppArgb;
10bubuko.com,布布扣            BitmapData data = bmp.LockBits(rect, flag, format);
11bubuko.com,布布扣
12bubuko.com,布布扣            IntPtr ptr = data.Scan0;
13bubuko.com,布布扣
14bubuko.com,布布扣            int numBytes = width * height * 4;
15bubuko.com,布布扣            byte[] rgbValues = new byte[numBytes];
16bubuko.com,布布扣            Marshal.Copy(ptr, rgbValues, 0, numBytes);
17bubuko.com,布布扣
18bubuko.com,布布扣            for (int i = 0; i < rgbValues.Length; i += 4)
19bubuko.com,布布扣            {
20bubuko.com,布布扣                if (rgbValues[i] < 128)
21bubuko.com,布布扣                    rgbValues[i] = (byte)(255 - rgbValues[i]);
22bubuko.com,布布扣                if (rgbValues[i + 1] < 128)
23bubuko.com,布布扣                    rgbValues[i + 1] = (byte)(255 - rgbValues[i + 1]);
24bubuko.com,布布扣                if (rgbValues[i + 2] < 128)
25bubuko.com,布布扣                    rgbValues[i + 2] = (byte)(255 - rgbValues[i + 2]);
26bubuko.com,布布扣            }
27bubuko.com,布布扣
28bubuko.com,布布扣            Marshal.Copy(rgbValues, 0, ptr, numBytes);
29bubuko.com,布布扣            bmp.UnlockBits(data);
30bubuko.com,布布扣
31bubuko.com,布布扣            return (Image)bmp;
32bubuko.com,布布扣        }

bubuko.com,布布扣
 1bubuko.com,布布扣        public static Image GlowingEdge(Image img)
 2bubuko.com,布布扣        {
 3bubuko.com,布布扣            int width = img.Width;
 4bubuko.com,布布扣            int height = img.Height;
 5bubuko.com,布布扣
 6bubuko.com,布布扣            Bitmap oldImg = (Bitmap)img;
 7bubuko.com,布布扣            Bitmap newImg = new Bitmap(width, height);
 8bubuko.com,布布扣
 9bubuko.com,布布扣            Color c1, c2, c3;
10bubuko.com,布布扣            int rr, gg, bb;
11bubuko.com,布布扣            for (int i = 0; i < width - 1; i++)
12bubuko.com,布布扣            {
13bubuko.com,布布扣                for (int j = 0; j < height - 1; j++)
14bubuko.com,布布扣                {
15bubuko.com,布布扣                    int r = 0, g = 0, b = 0;
16bubuko.com,布布扣
17bubuko.com,布布扣                    c1 = oldImg.GetPixel(i, j);
18bubuko.com,布布扣                    c2 = oldImg.GetPixel(i + 1, j);
19bubuko.com,布布扣                    c3 = oldImg.GetPixel(i, j + 1);
20bubuko.com,布布扣
21bubuko.com,布布扣                    rr = (c1.R - c2.R) * (c1.R - c2.R) + (c1.R - c3.R) * (c1.R - c3.R);
22bubuko.com,布布扣                    gg = (c1.G - c2.G) * (c1.G - c2.G) + (c1.G - c3.G) * (c1.G - c3.G);
23bubuko.com,布布扣                    bb = (c1.B - c2.B) * (c1.B - c2.B) + (c1.B - c3.B) * (c1.B - c3.B);
24bubuko.com,布布扣
25bubuko.com,布布扣                    r = (int)(3 * Math.Sqrt(rr));
26bubuko.com,布布扣                    g = (int)(3 * Math.Sqrt(gg));
27bubuko.com,布布扣                    b = (int)(3 * Math.Sqrt(bb));
28bubuko.com,布布扣
29bubuko.com,布布扣                    r = r < 0 ? 0 : r;
30bubuko.com,布布扣                    r = r > 255 ? 255 : r;
31bubuko.com,布布扣                    g = g < 0 ? 0 : g;
32bubuko.com,布布扣                    g = g > 255 ? 255 : g;
33bubuko.com,布布扣                    b = b < 0 ? 0 : b;
34bubuko.com,布布扣                    b = b > 255 ? 255 : b;
35bubuko.com,布布扣
36bubuko.com,布布扣                    newImg.SetPixel(i, j, Color.FromArgb(r, g, b));
37bubuko.com,布布扣                }
38bubuko.com,布布扣            }
39bubuko.com,布布扣            return newImg;
40bubuko.com,布布扣        }

 

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

图像处理--曝光、霓虹(照亮边缘效果),布布扣,bubuko.com

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

原文:http://www.cnblogs.com/jameslong/p/3805995.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!