Wie kann ich laden Sie ein generiertes Bitmap in einer PictureBox?
Scheint es viele picturebox Fragen gibt, aber ich habe keine gefunden, die sich mit der änderung der Inhalt einer picturebox in ein bitmap-das war nicht einfach aus der Datei geladen.
Meine Anwendung ein array von bytes und erzeugt eine bitmap von Ihnen. Ich möchte wirklich vermeiden, in eine Datei schreiben als ein intermediate-Verarbeitung Schritt.
Weil es ein array von bytes ist, und nicht 2-byte-Worte, die ich brauchte, um eine indizierte bitmap mit einer Graustufen-palette.
Ich dann in der bitmap indiziert, um eine normale (24 bit rgb).
Dies ist der code, der zu einem Fehler führt für mich:
pictureBox1.Image = (System.Drawing.Image)bmp2;
Wenn ich die form (die picturebox versucht zu zeichnen), wird der thread halt einfach die Ausführung mit einer Meldung:
"Ungültiger parameter im System.Zeichnung.Bild.get_RawFormat()"
Was mache ich falsch? Wie erstelle ich ein Sicheres bitmap für die picturebox?
Dies ist, was schafft "bmp2":
//creating the bitmap from the array
System.Drawing.Bitmap bmp1 = new System.Drawing.Bitmap(100, 100, 100, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, MyIntPtr);
//creating a proper indexed palette
System.Drawing.Imaging.ColorPalette GrayPalette = bmp1.Palette;
for (int i = 0; i < GrayPalette.Entries.Length; i++)
{
GrayPalette.Entries[i] = Color.FromArgb(i, i, i);
}
bmp1.Palette = GrayPalette;
//creating a non-indexed, 24bppRGB bitmap for picturebox compatibility
System.Drawing.Bitmap bmp2 = new Bitmap(bmp1.Width, bmp1.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Graphics gr = Graphics.FromImage(bmp2);
gr.DrawImage(bmp1, 0, 0);
gr.Dispose();
Wenn ich bmp1.Save(@"testfile.bmp") bekomme ich eine vollkommen akzeptable bitmap, die angezeigt werden, ohne Anomalie.
Warum kann ich meine bitmap als meine picturebox.Bild?
Gibt es zusätzliche Parameter, die von der picturebox, die ich ändern muß vor dem laden der neuen bitmap in es?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, ich habe das problem gefunden was ich Tat.
Werde ich versuchen zu erklären, was falsch war, aber als nicht-guru bin ich nicht sicher, wie genau ich sein werde.
Offenbar Einstellung das Bild in eine pictureBox nicht kopieren Speicher überall. Später in meiner Anwendung (ein paar Funktionen Weg von der code-snippet, das ich gezeigt habe) ich war die Entsorgung der variable "bmp1".
Mir war nicht bewusst, dass die Erinnerung im Zusammenhang mit bmp1 war der gleiche Speicher überall dort, wo die Funktion geht, und es zu zerstören, wird der Fehler "Ungültiger parameter im System.Zeichnung.Bild.get_RawFormat()" erhoben wurde. Ich nehme an, er tut dies, weil jedes mal, wenn die pictureBox neu gezeichnet und verwendet es, die "Bild" - Eigenschaft, gut, ziehen. Denn ich war die Entsorgung der Speicher in Verbindung mit der "Bild" - Eigenschaft war ich töten alle Hoffnungen der picturebox_Paint Veranstaltung ordnungsgemäß funktioniert.
Ich hoffe nur, dass ich nicht über Speicher-Lecks nun als Ergebnis der nie die Entsorgung von beliebigen bitmaps, die ich erstellen.
Dispose
. Ich meinte nur, dass nicht aufrufenDispose
sollte nicht im Alleingang erstellen, ein massives Speicherleck.