2009-05-21 15 views
3

Ich habe kürzlich eine OverflowException in GDI + über ein Drittanbieter-Tool gefunden, das mir einige Probleme bereitet. Ich versuche, die Ursache dafür aufzuspüren und dann zu entscheiden, ob es eine Lösung für das Problem gibt.GdiPlus OverflowException

Der Fehler tritt in SafeNativeMethods.Gdip.GdipFillPath() auf, das einen Fehlercode von 11 zurückgibt, der gleich GpStatus.ValueOverflow ist. Ich habe keine Ahnung, was das bedeutet oder was es verursachen könnte. Die Konsequenzen sind ziemlich hoch, weil ich einen großen Bildschirmbereich habe, der nicht gezeichnet werden kann.

Das Stack-Trace für diesen Fehler ist:

System.OverflowException: Überlauffehler. bei System.Drawing.Graphics.CheckErrorStatus (Int32-Status) bei System.Drawing.Graphics.FillPath (Pinsel Pinsel, GraphicsPath-Pfad) bei Northwoods.Go.GoShape.DrawPath (Grafiken g, GoView-Ansicht, Stift, Pinsel Pinsel , GraphicsPath - Pfad) bei Northwoods.GoRoundedRectangle.Paint (Grafiken g, GoView - Ansicht) bei Northwoods.Go.GoLayer.Paint (Grafiken g, GoView - Ansicht, RectangleF clipRect) bei Northwoods.Go.GoView.PaintObjects (Boolean doc, Boole'sche Ansicht, Grafiken g, RectangleF clipRect) bei Northwoods.Go.GoView.PaintView (Grafiken g, RectangleF clipRect) bei Northwoods.Go.GoView.onPaintCanvas (PaintEventArgs evt) bei Northwoods.Go.GoView.OnPaint (PaintEventArgs evt) bei System.Windows.Forms.Control.Pain tWithErrorHandling (PaintEventArgse, Schicht Int16, Boolean disposeEventArgs) bei System.Windows.Forms.Control.WmPaint (Message & m) bei System.Windows.Forms.Control.WndProc (Message & m) bei System.Windows.Forms .Control.ControlNativeWindow.OnMessage (Message & m) bei System.Windows.Forms.Control.ControlNativeWindow.WndProc (Message & m) bei System.Windows.Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lparam)

Es gibt offensichtlich 2 Parameter, die hier verwendet werden. Der GraphicsPath, auf den ich keine Kontrolle habe und der Brush. Der Pinsel wird von einer statischen Methode zurückgegeben, und um sicher zu sein, dass es kein Problem mit der Entfernung ist, habe ich versucht, die Pinsel-Eigenschaft so zu ändern, dass ein Klon wie der folgende zurückgegeben wird. Dies scheint jedoch keine Auswirkungen zu haben.

public Brush 
{ 
    get { 
     return MappingLinearGradient(this.Bounds).Clone(); 
     } 
} 

Antwort

3

IIRC, der maximale Ebenenbereich für eine Grafikobjekt (1 < < 24) - 1 => 16,7 Millionen Pixel.

Ich bin mir nicht sicher, ob es Einschränkungen in der Gegend selbst gibt, aber ich würde mich darum kümmern.

+0

Danke leppie. Scheint, dass wir leider die Grenzen auf einen sehr großen Wert gesetzt haben, bevor wir fortfahren, etwas mehr normales zu berechnen. Aber manchmal hat der Zeichenthread innerhalb dieses Werkzeugs diese neuen Grenzen aufgegriffen, bevor seine Höhe richtig berechnet wurde ... und offensichtlich float.MaxValue war ein wenig groß für das Graphics-Objekt. – Ian

Verwandte Themen