又回到了面向图片像素处理的实现了。想一想,早知道就先把“调节图片光暗”这部分提前到图像处理(六)那里,因为这部分跟(二)至(五)的原理都差不多。不过算了,不改了,照样写下去好了。
我个人的理解,调整图片的光暗,就是通过对每个像素里面红绿蓝三个值分别加上一个常数,这就完成了。其实说多也没有用,直接贴出代码好了,
/// <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把调整后的图片显示出来。