ヘッダー

VB.NET2002対応 VB.NET2003対応 VB2005対応

 

画像の色彩を調節する

以下の関数Emphasizeを使用すると、画像 の赤、緑、青の任意の色を強調(または弱化)することができる。使用例はすぐ下にある。

VB.NET2002対応 VB.NET2003対応 VB2005対応

'''■Emphasize
''' <summary>赤、緑、青の色を強調します。</summary>
''' <param name="SourceImage">元となる画像を指定します。</param>
''' <param name="R">-255からの範囲で赤の強調度を指定します。</param>
''' <param name="G">-255からの範囲で緑の強調度を指定します。</param>
''' <param name="B">-255からの範囲で青の強調度を指定します。</param>
''' <returns>処理後の画像を返します。</returns>
''' <remarks>R, G, Bに等しい値を設定すると画像の明るさを調節できます。</remarks>
Private Function Emphasize(ByVal SourceImage As Image, ByVal R As Integer, ByVal G As Integer, ByVal B As Integer) As Bitmap

    Dim X As Integer
   
Dim Y As Integer
   
Dim NewR As Integer
   
Dim NewG As Integer
   
Dim NewB As Integer
   
Dim BMP1 As Bitmap '効果適用前の画像
   
Dim BMP2 As Bitmap '効果適用後の画像
   
Dim C As Color

    BMP1 = CType(SourceImage, Bitmap)
    BMP2 =
New Bitmap(BMP1.Width, BMP1.Height)

    For Y = 0 To BMP1.Height - 1
        For X = 0 To BMP1.Width - 1

            C = BMP1.GetPixel(X, Y)

            'R, G, Bの値が~の範囲に収まるように調節します。
           
NewR = RGBRange(C.R + R)
            NewG = RGBRange(C.G + G)
            NewB = RGBRange(C.B + B)

            BMP2.SetPixel(X, Y, Color.FromArgb(NewR, NewG, NewB))

        Next X
   
Next Y

    Return BMP2

End Function

'''■RGBRange
''' <summary>値を0~255の範囲になるように調節します。</summary>
''' <param name="Value">調節前の値を指定します。</param>
''' <returns>調節後の値を返します。この値は必ず0~255の範囲内です。</returns>
''' <remarks></remarks>
Private Function RGBRange(ByVal Value As Integer) As Integer

    Select Case Value
        Case Is < 0
           
Return 0
        Case Is > 255
           
Return 255
        Case
Else
            Return
Value
    End
Select

End Function

メモ:

・この処理にはやや時間がかかります。

・このサンプル中のRGBRange関数は他のサンプルに登場する同名の関数とまったく同じ内容です。

 

 

使用例1:PictureBox1の赤を強調する例

VB.NET2002対応 VB.NET2003対応 VB2005対応

Me.Cursor = Cursors.WaitCursor

PictureBox1.Image = Emphasize(PictureBox1.Image, 50, 0, 0)

Me.Cursor = Cursors.Default

メモ:PictureBox1にはあらかじめ画像を読み込んでおくなどしてImageプロパティに値をセットしておく必要があります。

 

使用例2:PictureBox1の画像を少し明るくする例

VB.NET2002対応 VB.NET2003対応 VB2005対応

Me.Cursor = Cursors.WaitCursor

PictureBox1.Image = Emphasize(PictureBox1.Image, 50, 50, 50)

Me.Cursor = Cursors.Default

メモ:PictureBox1にはあらかじめ画像を読み込んでおくなどしてImageプロパティに値をセットしておく必要があります。

 


VB6対応  VB6でも同じ手法で実現できます。処理速度向上のためにWindows API関数のGetDIBitsSetDIBitsを 使用します。