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


【事前準備】


・フォームにictureBoxを貼り付け、DockプロパティをFillにする。


C:\aaabc.bmpを読み込み表示する。(32bppのBitmap)
また、読み込む際に、特定の色の値を編集する。


【ソースコード】

Imports System.Drawing.Imaging

Public Class Form1
 Private bmp As New Bitmap(“C:\aaabc.bmp”)

 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  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 + 0) = Nothing ‘B
   ’rgbvaluesSr(i + 1) = Nothing ‘G
   ’rgbvaluesSr(i + 2) = Nothing ‘R
   ’rgbvaluesSr(i + 3) = Nothing ‘A
  Next

  System.Runtime.InteropServices.Marshal.Copy(rgbvaluesSr, 0, ptrSr, bytesSr)
  bmp.UnlockBits(bmpSr)

 End Sub

 Private Sub Picture_Box(ByVal sender As Object, ByVal e As PaintEventArgs) Handles PictureBox1.Paint

  e.Graphics.DrawImage(bmp, 0, 0, PictureBox1.Width, PictureBox1.Height)

 End Sub

End Class

途中にある、For文の中のrgbvaluesSrシリーズのコメントを、
1行ずつ外してみてください。

それぞれ、画像のBlue , Green , Red , Alpha成分が0になったと思います。


元の画像


1行目のコメントを外すと、


青で描画してあるaの文字が消えると思います。
他の部分も同様にやってみて下さい。


【関連記事】



・Bitmap.LockBitsメソッド

・Byte配列について

・16色Bitmapを作成し描画する(LockBits使用)



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


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


googleでの検索結果はこちら