I'm using Marshal.Copy()
to copy the pixel information from a Bitmap
to an int[]
array, the problem resides in the fact that the information that is coming to this array is coming all wrong, like:
[0] = -8682109;
[1] = -8682109;
[2] = -8616573;
[3] = -8616573;
[4] = -8550527;
and so on...
the code for the method is:
private unsafe int[] BmpToBytes_Unsafe(Bitmap bmp)
{
BitmapData bData = bmp.LockBits(new Rectangle(new Point(), bmp.Size),
ImageLockMode.ReadOnly,
PixelFormat.Format32bppRgb);
// number of bytes in the bitmap
byteCount = bData.Stride * (bmp.Height);
int[] bytes = new int[byteCount / 4];
Marshal.Copy(bData.Scan0, bytes, 0, byteCount/4);
// don't forget to unlock the bitmap!!
bmp.UnlockBits(bData);
return bytes;
When I was using a byte[]
array, the information that was stored was correct, so I don't know what is happening here.
Those values are perfectly normal. They are 32bpp pixels with the alpha channel at 0xff, the usual value. In other words: -8682109 == 0xff7b8583. Any alpha value >= 128 will make the value negative because it sets the sign bit.
Using uint[] instead of int[] can make that easier to see.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With