■58135 / inTopicNo.1) |
BitmapDataの負のStrideについて |
□投稿者/ レーモン (9回)-(2011/03/26(Sat) 19:47:06)
|
分類:[VB.NET/VB2005 以降]
VB2008 Expressを使用しています。
先日、ビットマップの余白範囲をスキャンするための方法について質問させて頂きました。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=58070
その際、BitmapDataのStrideには負の値を持つものがあるという話題がでましたので、色々と調べたのですが
分かりやすい解説を見つけることができませんでした。
例えば、Strideが負であると、上記質問の中で記載したコードでは、
' ---------------------------------------------------------------------
Dim bmp As Bitmap
Dim bmData As Imaging.BitmapData
Dim rect As Rectangle
Dim intStride As Integer
Dim Scan0 As System.IntPtr
Dim bytBits As Byte()
Dim intSize As Integer
'bmpのフォーマットはImaging.PixelFormat.Format32bppArgbである。
rect = New Rectangle(0, 0, bmp.Width, bmp.Height)
bmData = bmp.LockBits(rect, _
Imaging.ImageLockMode.ReadOnly, _
Imaging.PixelFormat.Format24bppRgb)
intStride = bmData.Stride
intSize = intStride * bmp.Height
Scan0 = bmData.Scan0
bytBits = New Byte(intSize - 1) {}
Marshal.Copy(Scan0, bytBits, 0, intSize)
bmp.UnlockBits(bmData)
' ---------------------------------------------------------------------
の、以下メソッドの第四引数intSize = intStride * bmp.Heightが負になってしまいます。
> Marshal.Copy(Scan0, bytBits, 0, intSize)
そこで、質問は以下の通りです。
1.上記Marshal.Copyメソッドでバイト配列bytBitsを取得するには、ストライドintStrideに絶対値を
用いればよいのでしょうか?
2.上記でよい場合、バイト配列の先頭には、最後のピクセル(ビットマップ右下端のピクセル)の
(RGBの)Bの値が入っているのでしょうか?
3.これらビットマップの検証を色々と行っているのですが、まだStrideが負の画像にお目にかかったことがありません。
これを検証するために、Strideが負のビットマップがあるといいのですが、これをVBで作成することは可能でしょうか?
どうぞよろしくお願いします。
|
|