码迷,mamicode.com
首页 > 其他好文 > 详细

图像处理---染色

时间:2014-06-25 17:57:59      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   http   tar   

1.效果图:
        此效果图使用的选染色为Color.Yellow
        bubuko.com,布布扣

2.实现原理:
        首先指定一种渲染颜色,然后计算当前象素的灰度值,用当前象素的灰度值分别乘以渲染色的R、G、B
        分量值,将结果做为当前象素的最终颜色

3.实现代码: 

bubuko.com,布布扣
 1bubuko.com,布布扣        /// <summary>
 2bubuko.com,布布扣        /// 染色
 3bubuko.com,布布扣        /// </summary>
 4bubuko.com,布布扣        /// <param name="img">原始图像</param>
 5bubuko.com,布布扣        /// <param name="color">指定渲染色</param>
 6bubuko.com,布布扣        /// <returns></returns>
 7bubuko.com,布布扣        public static Image Colorize(Image img, Color color)
 8bubuko.com,布布扣        {
 9bubuko.com,布布扣            //初始化变量
10bubuko.com,布布扣            Bitmap bmp = new Bitmap(img);
11bubuko.com,布布扣            int width = img.Width;
12bubuko.com,布布扣            int height = img.Height;
13bubuko.com,布布扣
14bubuko.com,布布扣            //获取Color对象的R、G、B分量值
15bubuko.com,布布扣            byte red = color.R;
16bubuko.com,布布扣            byte green = color.G;
17bubuko.com,布布扣            byte blue = color.B;
18bubuko.com,布布扣
19bubuko.com,布布扣            //将Bitmap对象锁定到系统内存中
20bubuko.com,布布扣            Rectangle rect = new Rectangle(0, 0, width, height);
21bubuko.com,布布扣            ImageLockMode flag = ImageLockMode.ReadWrite;
22bubuko.com,布布扣            PixelFormat format = PixelFormat.Format32bppArgb;
23bubuko.com,布布扣            BitmapData data = bmp.LockBits(rect, flag, format);
24bubuko.com,布布扣
25bubuko.com,布布扣            //初始化一个byte类型的数组
26bubuko.com,布布扣            int numBytes = width * height * 4;
27bubuko.com,布布扣            byte[] rgbValues = new byte[numBytes];
28bubuko.com,布布扣
29bubuko.com,布布扣            //将非托管的内存指针复制到数组
30bubuko.com,布布扣            IntPtr ptr = data.Scan0;
31bubuko.com,布布扣            Marshal.Copy(ptr, rgbValues, 0, numBytes);
32bubuko.com,布布扣
33bubuko.com,布布扣            //修改每个象素R、G、B分量的值
34bubuko.com,布布扣            int gray;
35bubuko.com,布布扣            for (int i = 0; i < numBytes; i += 4)
36bubuko.com,布布扣            {
37bubuko.com,布布扣                //计算当前象素的灰度值
38bubuko.com,布布扣                gray = (rgbValues[i] + rgbValues[i + 1] + rgbValues[i + 2]) / 3;
39bubuko.com,布布扣
40bubuko.com,布布扣                //染色后的R、G、B分量值
41bubuko.com,布布扣                rgbValues[i] = (byte)(blue * gray / 255);
42bubuko.com,布布扣                rgbValues[i+1] = (byte)(green * gray / 255);
43bubuko.com,布布扣                rgbValues[i+2] = (byte)(red * gray / 255);
44bubuko.com,布布扣            }
45bubuko.com,布布扣
46bubuko.com,布布扣            //将数组复制到非托管的内存指针
47bubuko.com,布布扣            Marshal.Copy(rgbValues, 0, ptr, numBytes);
48bubuko.com,布布扣
49bubuko.com,布布扣            //从内存中解锁Bitmap
50bubuko.com,布布扣            bmp.UnlockBits(data);
51bubuko.com,布布扣
52bubuko.com,布布扣            //返回值
53bubuko.com,布布扣            return (Image)bmp;
54bubuko.com,布布扣        }

 

4.说明:
         计算灰度值可参考:图像处理:黑白效果(灰度处理)

图像处理---染色,布布扣,bubuko.com

图像处理---染色

标签:style   class   blog   code   http   tar   

原文地址:http://www.cnblogs.com/jameslong/p/3805991.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!