画像の輝度調整するには、RGBを一律に加減すればよい。
1 2 3 |
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
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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%増