博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C# 图像处理(七)—— 调节图片光暗

Posted on 2012-07-11 00:21  linFen  阅读(2255)  评论(1编辑  收藏  举报

又回到了面向图片像素处理的实现了。想一想,早知道就先把“调节图片光暗”这部分提前到图像处理(六)那里,因为这部分跟(二)至(五)的原理都差不多。不过算了,不改了,照样写下去好了。

   我个人的理解,调整图片的光暗,就是通过对每个像素里面红绿蓝三个值分别加上一个常数,这就完成了。其实说多也没有用,直接贴出代码好了,

    /// <summary>
    /// 调整图片光暗
    /// </summary>
    /// <param name="mybm">原始图片</param>
    /// <param name="width">原始图片的长度</param>
    /// <param name="height">原始图片的高度</param>
    /// <param name="val">增加或减少的光暗值</param>
    /// <returns>经过调整了光暗后的图片</returns>

    public Bitmap LDPic(Bitmap mybm, int width, int height, int val)
    {
        Bitmap bm = new Bitmap(width, height);//初始化一个记录经过处理后的图片对象
        int x, y, resultR, resultG, resultB;//x、y是循环次数,后面三个是记录红绿蓝三个值的
        Color pixel;

        for (x = 0; x < width; x++)
        {
            for (y = 0; y < height; y++)
            {
                pixel = mybm.GetPixel(x, y);//获取当前像素的值
                resultR = helper.CheckRange(pixel.R + val);//检查红色值会不会超出[0, 255]
                resultG = helper.CheckRange(pixel.G + val);//检查绿色值会不会超出[0, 255]
                resultB = helper.CheckRange(pixel.B + val);//检查蓝色值会不会超出[0, 255]
                bm.SetPixel(x, y, Color.FromArgb(resultR, resultG, resultB));//绘图
            }
        }

        return bm;//返回调整了光暗后的图片
    }

 

    那个CheckRange的函数是用来检测经过改动后的红绿蓝三个值是否超出[0,255]的范围的,至于这个功能是比较简单的,所以也不好意思把代码贴出来。

    对了,还有一点的就是,其实光暗值,可以通过用一个numericUpDown控件来获取的,而且这样会比较方便,因为我是这样做的,但是有一点要注意的是,通过numericUpDown控件获取的值numericUpDown.Value应该是要用来int强制把它进行类型转换的,也就是说,(int)numericUpDown.Value。

    最后当然还是要利用pictureBox把调整后的图片显示出来。