画像を読み込み編集する2 (LockBits)


【事前準備】


・フォームにパネルを貼り付け、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の背景色を変えてみると面白いと思います。




関連記事


・画像を読み込み編集する3 (LockBits)


システム開発のためのVB.NETプログラミング関係一覧に戻る


システム開発の【Spread i-Vision】


google検索の結果はこちら