注意:画像の表示方法が分からないという方は、まず「コントロールやフォームに画像を表示する」をご覧ください。
SetGammaメソッドにガンマ値を設定したImageAttributesオブジェクトを使うと、ガンマ補正した画像を描画することが簡単にできます。
早速ですが、具体例を示します。この例のメソッドは、指定した画像をガンマ補正して新しい画像を作成するものです。PictureBoxコントロール(PictureBox1)をクリックすると、画像(C:\test\1.png)のガンマ値を2.0にした画像を作成して表示します。
なおこの例では、指定されたガンマ値の逆数をSetGammaメソッドに指定しています。通常画像処理ソフトを使ってガンマ補正をすると、ガンマ値が1より小さい時は暗く、1より大きい時は明るくなりますが、SetGammaメソッドでは逆に描画されるため、このようにしています。
'Imports System.Drawing ''' <summary> ''' 指定した画像を指定したガンマ値で補正した画像を作成する ''' </summary> ''' <param name="img">基になる画像</param> ''' <param name="gammaValue">ガンマ値</param> ''' <returns>ガンマ補正された画像</returns> Public Shared Function CreateGammaAdjustedImage(ByVal img As Image, _ ByVal gammaValue As Single) As Image '補正された画像の描画先となるImageオブジェクトを作成 Dim newImg As New Bitmap(img.Width, img.Height) 'newImgのGraphicsオブジェクトを取得 Dim g As Graphics = Graphics.FromImage(newImg) 'ImageAttributesオブジェクトの作成 Dim ia As New System.Drawing.Imaging.ImageAttributes() 'ガンマ値を設定する ia.SetGamma(1 / gammaValue) 'ImageAttributesを使用して描画 g.DrawImage(img, New Rectangle(0, 0, img.Width, img.Height), _ 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, ia) 'リソースを解放する g.Dispose() Return newImg End Function 'PictureBox1のClickイベントハンドラ Private Sub PictureBox1_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles PictureBox1.Click 'ガンマ補正をする画像 Dim img As New Bitmap("C:\test\1.png") 'ガンマ値を2.0にした画像を作成する Dim newImg As Image = CreateGammaAdjustedImage(img, 2.0F) img.Dispose() 'PictureBox1に表示 If Not PictureBox1.Image Is Nothing Then PictureBox1.Image.Dispose() End If PictureBox1.Image = newImg End Sub
//using System.Drawing; /// <summary> /// 指定した画像を指定したガンマ値で補正した画像を作成する /// </summary> /// <param name="img">基になる画像</param> /// <param name="gammaValue">ガンマ値</param> /// <returns>ガンマ補正された画像</returns> public static Image CreateGammaAdjustedImage(Image img, float gammaValue) { //補正された画像の描画先となるImageオブジェクトを作成 Bitmap newImg = new Bitmap(img.Width, img.Height); //newImgのGraphicsオブジェクトを取得 Graphics g = Graphics.FromImage(newImg); //ImageAttributesオブジェクトの作成 System.Drawing.Imaging.ImageAttributes ia = new System.Drawing.Imaging.ImageAttributes(); //ガンマ値を設定する ia.SetGamma(1/gammaValue); //ImageAttributesを使用して描画 g.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, ia); //リソースを解放する g.Dispose(); return newImg; } //PictureBox1のClickイベントハンドラ private void PictureBox1_Click(object sender, EventArgs e) { //ガンマ補正をする画像 Bitmap img = new Bitmap(@"C:\test\1.png"); //ガンマ値を2.0にした画像を作成する Image newImg = CreateGammaAdjustedImage(img, 2f); img.Dispose(); //PictureBox1に表示 if (PictureBox1.Image != null) { PictureBox1.Image.Dispose(); } PictureBox1.Image = newImg; }
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。