Tengo un problema realmente extraño donde tengo una aplicación que involucra mucha manipulación GDI + de imágenes. Como cortar zoom, etc. Mi aplicación funciona bien en .net 2.0, pero en .net 4.0 recibo informes de mis usuarios de que está fallando con un error gdi + "sin memoria". Ahora sé que el error "sin memoria" gdi + es una trampa para muchos errores, pero ¿por qué funcionaría en .net 2.0 y NO en .net 4..net2.0 vs .net 4.0 gdi + diferencia?
Específicamente tengo un control que dibuja "capas" "uno encima del otro para crear un mapa de bits compuesto. este control funcionó bien en .NET 2.0 y NO en .net 4.
Secically sucede cuando tengo un jpeg de 10 megapíxeles cargado desde el sistema de archivos y estoy aplicando un zoom y transfiero a la imagen.
para dar aún más detalles. g.draw con una escala de matriz de 4 que significa 400% más grande con cualquier rotación devolverá este "error de memoria
Sólo ocurre en cajas xp y NO en cajas de Windows 7. ¿Qué podría ser la diferencia aquí?
ningún arrendatario ...
aquí es la medida de mi seguimiento de la pila conectado desde la excepción capturada.
<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>
Gracias por su tiempo. ser suave ya que esta es mi primera pregunta aquí.
0xA3 no tengo ninguna traza de la pila en el momento, pero la llamada g.draw exacto es el siguiente:
g.DrawImage(
bmpBigPicture,
new Rectangle(
destBigX,
destBigY,
(int)(destBigWidth*Scale),
(int)(destBigHeight*Scale)),
0,
0,
bmpBigPicture.Width,
bmpBigPicture.Height,
GraphicsUnit.Pixel,
imgAttribs
);
donde la escala 1s 4 para 400%
Bienvenido a SO =) Solo para asegurarse ... ¿Estableció su aplicación en el destino **. Net4 ** y luego la reconstruyó y luego se produjo este problema? – gideon
¿Tiene un rastro de pila por casualidad? ¿Y cuál es el método 'g.draw' exactamente? –
Sí, eso es correcto. y parece que solo ocurre en los cuadros xp, las cajas de Windows 7 funcionan como un amuleto. –