Ich verwende Marshal.Copy()
, um die Pixelinformationen von einem Bitmap
zu einem int[]
Array zu kopieren, das Problem liegt in der Tatsache, dass die Informationen, die zu diesem Array kommen alle kommen falsch, wie:Bitmap zu int [] mit Marshal.Copy()
[0] = -8682109;
[1] = -8682109;
[2] = -8616573;
[3] = -8616573;
[4] = -8550527;
and so on...
der Code für die Methode ist:
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;
Als ich ein byte[]
Array verwendet wird, die Informationen, die gespeichert wurde, war richtig, so weiß ich nicht, was geschieht Hier.
Das Problem ist, dass die Methode Marshal.Copy nicht Uint [] nimmt, wissen Sie, wie ich diesen Wert manipulieren könnte, die RGB-Komponenten zu trennen? –
Verwenden Sie Color.FromArgb(), es dauert ein Int. –