手记解决Graphics.DrawImage带ImageAttributes在XP报内存不足的问题
Posted ahdung
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手记解决Graphics.DrawImage带ImageAttributes在XP报内存不足的问题相关的知识,希望对你有一定的参考价值。
异常信息:
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,于是引发异常。
解决思路,既然同时满足这两者会报错:
g.DrawImage(PixelFormat特别的Image, xxx, imageAttributes)
那么只要错开其一就行,比如这两种就不会报:
g.DrawImage(常规Image, xxx, imageAttributes); //方法一 g.DrawImage(PixelFormat特别的Image, xxx); //方法二,不使用imageAttributes
所以可以用方法二从原图得到一张像素格式正常的新图,然后用方法一把它画出去,就是弄个副本。
-END-
以上是关于手记解决Graphics.DrawImage带ImageAttributes在XP报内存不足的问题的主要内容,如果未能解决你的问题,请参考以下文章
我应该使用哪个 Gdiplus::Graphics::DrawImage 函数?
关于Jpanel中g.drawImage函数bug调试。。。
关于Jpanel中g.drawImage函数bug调试。。。