【C#】画像処理 ~ コントラスト ~

コントラスト

 * 明暗の差
  => コントラストが強い : 明暗の差が大きい

■ サンプル

コントローラ

 * button x 1
 * trackBar x 1
 * pictureBox x 1

コード

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;

namespace SampleForm
{
  public partial class Form1 : Form
  {
    private Image sourceImage;

    public Form1()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
      this.sourceImage = this.pictureBox1.Image;
    }

    private void button1_Click(object sender, EventArgs e)
    {
      this.pictureBox1.Image = AdjustContrast(this.sourceImage, this.trackBar1.Value);
    }

    /// <summary>
    /// コントラスト変更
    /// </summary>
    /// <param name="targetImage">基画像</param>
    /// <param name="contrast">コントラストの値(-100~100)</param>
    /// <returns>コントラスト変更後の画像</returns>
    private static Bitmap AdjustContrast(Image targetImage, float contrast)
    {
      //コントラストを変更した画像の描画先となるImageオブジェクトを作成
      var newImage = new Bitmap(targetImage.Width, targetImage.Height);
      // Graphicsオブジェクトを取得
      using (var graphics = Graphics.FromImage(newImage))
      {
        // ColorMatrixオブジェクトの作成
        float scale = (100f + contrast) / 100f;
        scale *= scale;
        float append = 0.5f * (1f - scale);
        var colorMatrix = new ColorMatrix(new float[][] {
          new float[] {scale, 0, 0, 0, 0},
          new float[] {0, scale, 0, 0, 0},
          new float[] {0, 0, scale, 0, 0},
          new float[] {0, 0, 0, 1, 0},
          new float[] {append, append, append, 0, 1}
        });

        // ImageAttributesオブジェクトの作成
        var imageAttributes = new ImageAttributes();
        // ColorMatrixを設定する
        imageAttributes.SetColorMatrix(colorMatrix);

        // ImageAttributesを使用して描画
        graphics.DrawImage(targetImage,
            new Rectangle(0, 0, targetImage.Width, targetImage.Height),
            0, 0, targetImage.Width, targetImage.Height, GraphicsUnit.Pixel, imageAttributes);
      }
      return newImage;
    }
  }
}


関連記事

画像処理

画像処理 ~ 輝度変更 (明るさ) ~
https://blogs.yahoo.co.jp/dk521123/37844934.html
画像処理 ~ シャープネス ~
https://blogs.yahoo.co.jp/dk521123/37837353.html
画像処理 ~ 回転 ~
https://blogs.yahoo.co.jp/dk521123/37853430.html
画像処理 ~ アフィン変換 ~
https://blogs.yahoo.co.jp/dk521123/38061211.html

その他

PictureBox ~画像を表示する~
https://blogs.yahoo.co.jp/dk521123/23504075.html
PictureBox [7] ~ 画像をコピーする ~
https://blogs.yahoo.co.jp/dk521123/37857445.html
C#】Graphics ~ 図形の描画 ~
https://blogs.yahoo.co.jp/dk521123/32877749.html