Frage

Ich habe eine .NET 2.0-Anwendung, die auf XP und Vista ganz gut läuft, aber auf Windows 7 RC (x64) stürzt mit dem folgenden Fehler:

Ausnahme Informationen


Ausnahmetyp: System.OutOfMemoryException Nachricht: Nicht genügend Arbeitsspeicher. Daten: System.Collections.ListDictionaryInternal Target: Void .ctor (System.Drawing.Image, System.Drawing.Drawing2D.WrapMode) Help: NULL Quelle: System.Drawing

Stacktrace Informationen


bei System.Drawing.TextureBrush..ctor (Bild Bild, WrapMode WrapMode) bei System.Windows.Forms.ControlPaint.DrawBackgroundImage (Graphics g, Bild Background, Farbe backcolor, ImageLayout Background, Rechteck Grenzen, Rechteck clipRect, Punkt scrollOffset, RightToLeft rightToLeft) bei System.Windows.Forms.Control.PaintBackground (PaintEventArgse, Rechteck Rechteck, Farbe backcolor, Punkt scrollOffset) bei System.Windows.Forms.Control.PaintBackground (PaintEventArgs e, Rechteck Rechteck) bei System.Windows.Forms.Control.OnPaintBackground (PaintEventArgs pEvent) bei System.Windows.Forms.ScrollableControl.OnPaintBackground (PaintEventArgs e) bei System.Windows.Forms.Control.PaintWithErrorHandling (PaintEventArgs e, Int16 Schicht, Boolean disposeEventArgs) bei System.Windows.Forms.Control.WmPaint (Message & m) bei System.Windows.Forms.Control.WndProc (Message & m) bei System.Windows.Forms.ScrollableControl.WndProc (Message & m)

Alle Ideen, warum dies geschieht, oder wie ich programmieren könnte um ihn herum? Es ist nur eine Standard-winform ohne besonderen Hintergrund zu malen.

UPDATE: Ich habe festgestellt, dass dies nur ein Problem, wenn die Background = ImageLayout.Tile, die auch die Standardeinstellung. Setzen Sie ihn auf Zoom oder Center und die Ausgabe verschwindet. Das ist ziemlich unbefriedigend aber, weil ich es Kachel müssen.

War es hilfreich?

Lösung 2

Schaltet die Lösung dieses Problems aus hatte mit der PNG-Datei selbst für den Hintergrund verwendet zu tun. Ich öffnete es nur mit Paint.NET und neu gespeichert es, legte es dann zurück in dem Projekt und es hat funktioniert.

Nicht sicher, was sich verändert, aber es löste das Problem.

Andere Tipps

Ich hatte ein ähnliches Problem. In meinem Fall hatte ich von meinem Memory angeordnet ich das Bild geladen aus.

//The following throws and OutOfMemoryException at the TextureBrush.ctor():

    /*someBytes and g declared somewhere up here*/
    Bitmap myBmp = null;
    using(MemoryStream ms = new MemoryStream(someBytes))
       myBmp = new Bitmap(ms);

    if(myBmp != null) //that's right it's not null.
       using(TextureBrush tb = new TextureBrush(myBmp)) //OutOfMemoryException thrown
          g.FillRectangle(tb,0,0,50,50);

//This code does not throw the same error:

    /*someBytes and g declared somewhere up here*/
        MemoryStream ms = new MemoryStream(someBytes);
        Bitmap myBmp = new Bitmap(ms);

        if(myBmp != null)
           using(TextureBrush tb = new TextureBrush(myBmp))
              g.FillRectangle(tb,0,0,50,50);

Bitte nicht das Bild entsorgen oder das Filestream-Objekt in der Nähe von dem Sie das Bild erhalten haben, bevor Sie die TextureBrush Klasse für Fliesen aufrufen. Andernfalls wird die TextureBrush Klasse wird eine Ausnahme von Speicher werfen.

So ist der bessere Weg ist es, die gekachelte Bild zeigen, indem sie die TextureBrush Bild aufrufe und schließen Sie dann das Filestream-Objekt in dem Paint-Ereignisse der Windows-Form.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top