Вопрос

У меня есть приложение .NET 2.0, которое отлично работает в XP и Vista, но в Windows 7 RC (x64) оно вылетает со следующей ошибкой:

Информация об исключении


Тип исключения:System.outofmemoryException Сообщение:Недостаточно памяти.Данные:System.collections.listdictionaryinternal Targetsite:Void .ctor (system.drawing.image, system.drawing.drawing2d.wrapmode).Нулевой источник:Система.Рисование

Информация о стекетраце


at system.drawing.texturebrush..ctor (изображение изображения, wrapmode wrapmode) at system.windows.forms.controlpaint.drawbackgroundimage (графика G, изображение FoanleImage, Color Backcolor, ImageLayout fosticeMageLayout, прямоугольные границы, прямоугольный клипкт, точечный ScollOffset, правый правый ) at System.windows.forms.control.paintbackground (Painteventargs e, прямоугольник прямоугольник, цветовой бэкколор, точечный прокрутки) на System.windows.forms.control.paintbackground (Painteventargs e, прямоугольный прямоугольник) на system.windows.forms.control. OnPaintBackground(PaintEventArgs pevent) at System.Windows.Forms.ScrollableControl.OnPaintBackground(PaintEventArgs e) at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs) at System.Windows.Forms.Control.WmPaint( Сообщение и M) AT SYSTEM.WINDOWS.FORMS.CONTROL.WNDPROC (Message & M) AT SYSTEM.WINDOWS.FORMS.ScrollableControl.wndproc (Message & M)

Есть какие-нибудь идеи о том, почему это происходит или как я могу программировать это?Это просто рисование стандартной формы Winform без специального фона.

ОБНОВЛЯТЬ:Я обнаружил, что это проблема только в том случае, если BackgroundImageLayout = ImageLayout.Tile, который также используется по умолчанию.Установите масштаб или центр, и проблема исчезнет.Однако это довольно неудовлетворительно, потому что мне нужно, чтобы это было плиткой.

Это было полезно?

Решение 2

Оказывается, решение этой проблемы было связано с самим PNG-файлом, используемым в качестве фона.Я просто открыл его с помощью Paint.NET и пересохранил, затем снова вставил в проект, и все заработало.

Не знаю, что изменилось, но это решило проблему.

Другие советы

У меня была аналогичная проблема.В моем случае я избавился от своего MemoryStream, из которого загрузил изображение.

//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);

Пожалуйста, не удаляйте изображение и не закрывайте объект файлового потока, из которого вы получили изображение, перед вызовом класса TextureBrush для мозаики.В противном случае класс TextureBrush выдаст исключение «Недостаточно памяти».

Поэтому лучший способ — отобразить мозаичное изображение, вызвав Image TextBrush, а затем закрыть объект файлового потока в событии Paint формы окна.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top