画像の輝度調整するには、RGBを一律に加減すればよい。
R = R + delta G = G + delta B = B + delta
ここで、deltaは-1.0~1.0の実数である。
ColorMatrixを使ってこの数式を適用することで、画像の輝度を簡単に調整できる。
ColorMatrix クラス (System.Drawing.Imaging)
http://msdn.microsoft.com/ja-jp/library/system.drawing.imaging.colormatrix(v=vs.110).aspx
サンプルコード
static public Bitmap AdjustBrightness(Bitmap image, float delta) { Bitmap dest = new Bitmap(image.Width, image.Height); Graphics g = Graphics.FromImage(dest); ColorMatrix cm = new ColorMatrix( new float[][] { new float[] {1, 0, 0, 0, 0}, new float[] {0, 1, 0, 0, 0}, new float[] {0, 0, 1, 0, 0}, new float[] {0, 0, 0, 1, 0}, new float[] {delta, delta, delta, 0, 1} }); ImageAttributes ia = new ImageAttributes(); ia.SetColorMatrix(cm); g.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, ia); g.Dispose(); return dest; }
実行例
左から 輝度25%減、元画像、輝度25%増