端くれプログラマの備忘録 C#,画像処理 [C#] 画像の輝度を調整する

[C#] 画像の輝度を調整する

画像の輝度調整するには、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;
}

実行例

0009

左から 輝度25%減、元画像、輝度25%増