GdiPlus OverflowException - PullRequest
       14

GdiPlus OverflowException

3 голосов
/ 21 мая 2009

Недавно я столкнулся с OverflowException в GDI + через сторонний инструмент, который вызывает у меня несколько проблем. Я пытаюсь найти причину этого, а затем решить, есть ли какое-либо решение проблемы.

Ошибка происходит в SafeNativeMethods.Gdip.GdipFillPath (), возвращая код ошибки 11, равный GpStatus.ValueOverflow. Я понятия не имею, что это значит или что может быть причиной. Последствия довольно высоки, потому что у меня большая область экрана, которую нельзя нарисовать.

Трассировка стека для этой ошибки:

System.OverflowException: ошибка переполнения. в System.Drawing.Graphics.CheckErrorStatus (состояние Int32) в System.Drawing.Graphics.FillPath (кисть, путь GraphicsPath) в Northwoods.Go.GoShape.DrawPath (Графика g, представление GoView, перо, кисть, путь GraphicsPath) в Northwoods.Go.GoRoundedRectangle.Paint (Графика g, представление GoView) в Northwoods.Go.GoLayer.Paint (Графика g, представление GoView, RectangleF clipRect) в Northwoods.Go.GoView.PaintObjects (логический документ, логический вид, графика g, RectangleF clipRect) в Northwoods.Go.GoView.PaintView (Графика g, RectangleF clipRect) в Northwoods.Go.GoView.onPaintCanvas (PaintEventArgs evt) в Northwoods.Go.GoView.OnPaint (PaintEventArgs evt) в System.Windows.Forms.Control.PaintWithErrorHandling (PaintEventArgs e, слой Int16, логическое значение disposeEventArgs) в System.Windows.Forms.Control.WmPaint (Сообщение & m) в System.Windows.Forms.Control.WndProc (сообщение & m) в System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Message & m) в System.Windows.Forms.Control.ControlNativeWindow.WndProc (Message & m) в System.Windows.Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Здесь, очевидно, используются 2 параметра. GraphicsPath, который я не могу контролировать, и Brush. Кисть возвращается статическим методом, и просто чтобы быть уверенным, что это не проблема с ее удалением, я попытался изменить свойство Brush, чтобы вернуть клон, как показано ниже. Однако это, похоже, не оказало влияния.

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

1 Ответ

3 голосов
/ 21 мая 2009

IIRC, максимальная площадь плоскости для графического объекта составляет (1 << 24) - 1 => 16,7 миллионов пикселей.

Я не уверен, есть ли ограничения на саму область, но я бы изучил ее.

...