【事前準備】
・フォームにパネルを貼り付け、DockプロパティをTopにする。
・その中に、ボタンを1つ貼り付ける
・Pictureboxをパネルの外に貼り付け、DockプロパティをFillにする。
ボタンをクリックするごとに、読み込んだ画像のAlphaを半分にしたり、
元に戻したりします。
【ソースコード】
Imports System.Drawing.Imaging
Public Class Form1
Private bmp As Bitmap
Private cCnt As Short = 0
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
bmp = New Bitmap(PictureBox1.Width, PictureBox1.Height, PixelFormat.Format32bppArgb)
Dim bmpFromImage As New Bitmap(“C:\aaa.jpg”)
Dim g As Graphics = Graphics.FromImage(bmp)
g.DrawImage(bmpFromImage, 0, 0, bmp.Width, bmp.Height)
g.Dispose()
End Sub
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)
End Sub
Private Sub pictTransparent(ByVal pow As Single)
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 – 4 Step 4
rgbvaluesSr(i + 3) = Math.Min(rgbvaluesSr(i + 3) * pow, 255)
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
If cCnt = 0 Then
cCnt = 1
pictTransparent(0.5)
Else
cCnt = 0
pictTransparent(2)
End If
PictureBox1.Invalidate()
End Sub
End Class
こんな感じになります。
PictureBoxの背景色を変えてみると面白いと思います。
関連記事
システム開発のためのVB.NETプログラミング関係一覧に戻る