Estoy usando Marshal.Copy()
para copiar la información de píxeles de Bitmap
en una matriz int[]
, el problema reside en el hecho de que la información que está llegando a esta matriz está llegando todos mal, como:Mapa de bits a int [] usando Marshal.Copy()
[0] = -8682109;
[1] = -8682109;
[2] = -8616573;
[3] = -8616573;
[4] = -8550527;
and so on...
el código para el método es:
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;
Cuando yo estaba usando una matriz byte[]
, la información que se almacena era correcto, así que no sé lo que está sucediendo aquí.
El problema es que el método Marshal.Copy no funciona [], ¿sabes cómo podría manipular ese valor, separando los componentes RGB? –
Use Color.FromArgb(), toma una int. –