图像处理:染色

图像处理:染色

Posted on  2008-11-06 15:27  parker 阅读( 360) 评论( 0编辑  收藏

1.效果图:
        此效果图使用的选染色为Color.Yellow
        

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

3.实现代码: 


 1        /// <summary>
 2        /// 染色
 3        /// </summary>
 4        /// <param name="img">原始图像</param>
 5        /// <param name="color">指定渲染色</param>
 6        /// <returns></returns>

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

45
46            //将数组复制到非托管的内存指针
47            Marshal.Copy(rgbValues, 0, ptr, numBytes);
48
49            //从内存中解锁Bitmap
50            bmp.UnlockBits(data);
51
52            //返回值
53            return (Image)bmp;
54        }

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值