【手記】解決Graphics.DrawImage帶ImageAttributes在XP報內存不足的問題

異常信息:spa

System.OutOfMemoryException: 內存不足。
   在 System.Drawing.Graphics.CheckErrorStatus(Int32 status)
   在 System.Drawing.Graphics.DrawImage(Image image, Rectangle destRect, Int32 srcX, Int32 srcY, Int32 srcWidth, Int32 srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs, DrawImageAbort callback, IntPtr callbackData)
   在 System.Drawing.Graphics.DrawImage(Image image, Rectangle destRect, Int32 srcX, Int32 srcY, Int32 srcWidth, Int32 srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)
   在 System.Drawing.Graphics.DrawImage(Image image, Rectangle destRect, Int32 srcX, Int32 srcY, Int32 srcWidth, Int32 srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr)
   ...

這個問題在外網也有一些討論,我傾向的說法是,XP的GDI+組件存在問題,對於像素格式PixelFormat有點特別的圖像,把它繪製到其它地方的時候處理很差ImageAttributes,因而引起異常。code

解決思路,既然同時知足這二者會報錯:orm

g.DrawImage(PixelFormat特別的Image, xxx, imageAttributes)

那麼只要錯開其一就行,好比這兩種就不會報:blog

g.DrawImage(常規Image, xxx, imageAttributes); //方法一
g.DrawImage(PixelFormat特別的Image, xxx); //方法二,不使用imageAttributes

因此能夠用方法二從原圖獲得一張像素格式正常的新圖,而後用方法一把它畫出去,就是弄個副本。內存

 

-END-it

相關文章
相關標籤/搜索