Interessantes Problem beim Bitmap locken in Verbindung mit Mono und .NET

Manchmal sucht man den Fehler an der falschen Stelle, wie ich gestern bei einem Quelltext feststellen dürfte welcher auf .NET und Mono laufen sollte. Man nehme folgenden C# Code:

    Bitmap bmp=new Bitmap((int)width, (int)height, PixelFormat.Format32bppArgb);
    BitmapData data=bmp.LockBits(new Rectangle(0, 0, (int)width, (int)height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);

    Marshal.Copy(intern.imageData, 0, data.Scan0, (int)(width*height*4));

    bmp.UnlockBits(data);
    data=null;
    return bmp;

Dieser Code kopiert Daten in ein Bitmap. Unter .NET funktioniert dies tadellos. Also lag der Gedanke nah das dies ein Mono Problem ist. Nach etlichen Tests ergab sich dann aber das es genau umgekehrt ist. Es liegt an der Zeile:

    BitmapData data=bmp.LockBits(new Rectangle(0, 0, (int)width, (int)height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);

und zwar speziell an dem ImageLockMode.ReadOnly. Dort könnte z.B. ImageLockMode.ReadWrite stehen und schon würde es unter .NET und Mono funktionieren. Doch warum geht es nun bei .NET trotzdem mit der falschen Variante? Die .NET API reicht die Parameter korrekt an die GDI+ weiter, diese ignoriert sie aber. Aus diesem Grund funktionierte es unter .NET. Sprich Mono hat alles richtig gemacht :)

2 Kommentare » Schreibe einen Kommentar

  1. Pingback: Online im .NET Quelltext stöbern | seeseekey.net

  2. Pingback: Online im .NET Quelltext stöbern | seeseekey.net

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.