У меня действительно странная проблема, когда у меня есть приложение, которое использует GDI + для манипуляции изображениями.Например, масштабирование при кадрировании и т. Д. Мое приложение работает нормально в .net 2.0, но в .net 4.0 я получаю сообщения от моих пользователей о том, что оно выходит из строя с ошибкой gdi + «недостаточно памяти».Теперь я знаю, что ошибка «нехватка памяти» gdi + - это ловушка для многих ошибок, но почему она работает в .net 2.0, а НЕ в .net 4.
В частности, у меня есть элемент управления, который рисует«слои» друг на друге для создания составного растрового изображения.этот элемент управления работал отлично в .net 2.0, а НЕ в .net 4.
Это происходит, когда у меня загружен 10-мегапиксельный JPEG-файл из файловой системы, и я применяю масштабирование и преобразование изображения.
, чтобы дать еще больше деталей.g.draw с масштабом матрицы 4, означающим увеличение на 400% при любом повороте, вернет это «ошибка нехватки памяти».
Это происходит только на xp-блоках, а НЕ на windows 7-блоках. Какая здесь может быть разница?
Любые получатели ...
вот степень трассировки моего стека, записанная из пойманного исключения.
<Event>
<TimeStamp>11/30/10 11:02:43.706</TimeStamp>
<Source>APPro2</Source>
<EventType>Error</EventType>
<Message><![CDATA[##: OutOfMemoryException
Message:
Out of memory.
Stack Trace:
at System.Drawing.Graphics.CheckErrorStatus(Int32 status)
at System.Drawing.Graphics.DrawImage(Image image, Rectangle destRect, Int32 srcX, Int32 srcY, Int32 srcWidth, Int32 srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs, DrawImageAbort callback, IntPtr callbackData)
at System.Drawing.Graphics.DrawImage(Image image, Rectangle destRect, Int32 srcX, Int32 srcY, Int32 srcWidth, Int32 srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr)
at Colorvision.Graphics.Layers.Picture.DrawBig(Graphics g) in D:\Colorvision_Workspaces\Colorvision\Graphics\Layers\Picture.cs:line 321
at Colorvision.Graphics.LayerCollection.DrawBig(Graphics e) in D:\Colorvision_Workspaces\Colorvision\Graphics\LayerCollection.cs:line 690]]></Message>
<EventID>0</EventID>
</Event>
Спасибо за ваше время.это мой первый вопрос здесь.
0xa3 В данный момент у меня нет трассировки стека, но точный вызов g.draw приведен ниже:
g.DrawImage(
bmpBigPicture,
new Rectangle(
destBigX,
destBigY,
(int)(destBigWidth*Scale),
(int)(destBigHeight*Scale)),
0,
0,
bmpBigPicture.Width,
bmpBigPicture.Height,
GraphicsUnit.Pixel,
imgAttribs
);
, где масштаб 1с 4 для 400%