LockBitsにて配列にコピーするには?


そに  2007-09-19 11:25:08  No: 143913

お初にお目にかかります。よろしく願いします。

  画面をキャプチャして、そのあとピクセル操作を加えたいと思っています。GetPixelとSetPixelでは遅すぎるようですのでLockBitsに挑戦したのですが、色情報がどうも配列にうまく入ってくれません。問題点と解決策を教えていただけると助かります。
  現在のコードは以下の通りで、ビットマップデーター(スクリーンショット)を渡し、変換後のビットマップを返すようにしています。よろしくお願いします。

    Private Function XXXX(ByVal oldbmp As Bitmap) As Bitmap

        Dim bmp As Bitmap = oldbmp
        Dim h As Integer = bmp.Height
        Dim w As Integer = bmp.Width

        Dim rect As New Rectangle(0, 0, w, h)
        Dim bmpdata As BitmapData = bmp.LockBits _
        (rect, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb)

        Dim ptr As IntPtr = bmpdata.Scan0
        Dim stride As Integer = bmpdata.Stride
        Dim bytes As Integer = stride * h
        Dim rgbValues(bytes) As Byte

        System.Runtime.InteropServices.Marshal.Copy _
        (ptr, rgbValues, 0, bytes)

  'ここでピクセル操作

        System.Runtime.InteropServices.Marshal.Copy _
        (rgbValues, 0, ptr, bytes)

        bmp.UnlockBits(bmpdata)

        Return bmp

   End Function


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加