事前準備
こちらのボタンを4つ貼り付けたバージョンです。
各ボタンを押下するごとに、BGRの各成分が0になります。
ボタン4を押すと、画像が元に戻ります。
【ソースコード】
Imports System.Drawing.Imaging
Public Class Form1
Private bmp As New Bitmap(“C:\aaa.jpg”)
Private btn(2) As Control
Private cCnt As Short = 0
Private Sub Picture_Box(ByVal sender As Object, ByVal e As PaintEventArgs) Handles PictureBox1.Paint
If bmp Is Nothing Then Exit Sub
e.Graphics.DrawImage(bmp, 0, 0, PictureBox1.Width, PictureBox1.Height)
btn(0) = Me.Button1
btn(1) = Me.Button2
btn(2) = Me.Button3
End Sub
Private Sub pictTransparent(ByVal ind As Integer)
Dim bmpSr As BitmapData = bmp.LockBits(New Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat)
Dim ptrSr As IntPtr = bmpSr.Scan0
Dim bytesSr As Integer = bmpSr.Stride * bmp.Height
Dim rgbvaluesSr(bytesSr) As Byte
System.Runtime.InteropServices.Marshal.Copy(ptrSr, rgbvaluesSr, 0, bytesSr)
For i As Integer = 0 To rgbvaluesSr.Length – 3 Step 3
rgbvaluesSr(i + ind) = 0
’rgbvaluesSr(i + 0) = 0 ‘ B
’rgbvaluesSr(i + 1) = 0 ‘ G
’rgbvaluesSr(i + 2) = 0 ‘ R
Next
System.Runtime.InteropServices.Marshal.Copy(rgbvaluesSr, 0, ptrSr, bytesSr)
bmp.UnlockBits(bmpSr)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _
Button1.Click, Button2.Click, Button3.Click
For i As Integer = 0 To 2
If CType(sender, Button) Is btn(i) Then
pictTransparent(i)
Exit For
End If
Next
PictureBox1.Invalidate()
End Sub
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
bmp.Dispose()
bmp = New Bitmap(“C:\aaa.jpg”)
PictureBox1.Invalidate()
End Sub
End Class
処理後は、こんな感じになります。
24bppRGBタイプのBitmapの成分は、BGRの順に並んでいるので、
それぞれを0にすることで、上記のような変化が起こります。
関連記事
システム開発のためのVB.NETプログラミング関係一覧に戻る