ビットマップをbyte配列にしたときにエラー(LockBits Marshal.Copy)
- 題名: ビットマップをbyte配列にしたときにエラー(LockBits Marshal.Copy)
- 著者: たかのり
- 日時: 2007/07/12 12:40:30
- ID: 20056
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: ビットマップをbyte配列にしたときにエラー(LockBits Marshal.Copy)
- 著者: も
- 日時: 2007/07/12 13:01:48
- ID: 20057
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: ビットマップをbyte配列にしたときにエラー(LockBits Marshal.Copy)
- 著者: y4yama
- 日時: 2007/07/12 13:20:10
- ID: 20058
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: ビットマップをbyte配列にしたときにエラー(LockBits Marshal.Copy)
- 著者: たかのり
- 日時: 2007/07/12 14:46:49
- ID: 20060
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
下記ソース(VB2005)で
800×600ピクセルのビットマップだと正しく処理されますが、
1000×1000ピクセルのビットマップだと下のようなエラーが発生します。
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes)の場所で
「保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。」
環境なのか?コードの問題なのか不明です。(ちなみにC#でも同じでした。)
お教えください。
Dim srcBmp As New Bitmap("C:\800600.jpg")
'Dim srcBmp As New Bitmap("C:\10001000.jpg")
Dim rect As New Rectangle(0, 0, srcBmp.Width, srcBmp.Height)
Dim bmpData As System.Drawing.Imaging.BitmapData = srcBmp.LockBits(rect, ImageLockMode.ReadWrite, srcBmp.PixelFormat)
Dim ptr As IntPtr = bmpData.Scan0
Dim bytes As Integer = srcBmp.Width * srcBmp.Height * 3
Dim rgbValues(bytes - 1) As Byte
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes)
Dim counter As Integer
For counter = 1 To rgbValues.Length - 2 Step 3
rgbValues(counter) = 255
Next
System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes)
srcBmp.UnlockBits(bmpData)
Dim g As Graphics = Me.CreateGraphics()
g.DrawImage(srcBmp, 5, srcBmp.Height + 10, srcBmp.Width, srcBmp.Height)
g.Dispose()