DrawImage Out of Memory

时间:2014-05-05 15:14:16

标签: c# memory drawimage

我的程序不断抛出这个错误,我完全不知道为什么。我已经搜索过互联网,但到目前为止我还没有找到任何真正的答案。任何帮助,将不胜感激。感谢。

    private Bitmap rotateImage(Bitmap b, float angle)
    {
        //create a new empty bitmap to hold rotated image
        Bitmap returnBitmap = new Bitmap(b.Width, b.Height,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
        //make a graphics object from the empty bitmap
        Graphics g = Graphics.FromImage(returnBitmap);
        //move rotation point to center of image
        g.TranslateTransform((float)b.Width / 2, (float)b.Height / 2);
        //rotate
        g.RotateTransform((int)angle);
        //move image back
        g.TranslateTransform(-(float)b.Width / 2, -(float)b.Height / 2);
        //draw passed in image onto graphics object
        b = (Bitmap)b.GetThumbnailImage(b.Width, b.Height, null, IntPtr.Zero);
        g.DrawImage(b, new Point(0, 0)); // Here is the error.
        b.Dispose();
        g.Dispose();
        return returnBitmap;
    }

编辑:错误是:"内存不足"它显得很近似。运行程序10秒后。在此之前,该程序运行良好。

2 个答案:

答案 0 :(得分:0)

Image.GetThumbnailImage的Microsoft文档中,它声明:

  

回调

     

输入:System.Drawing.Image.GetThumbnailImageAbort

     

Image.GetThumbnailImageAbort委托。

     

注意您必须创建委托并传递对委托的引用   作为回调参数,但未使用委托。

也许你应该添加该委托。

Image.GetThumbnailImageAbort abortCallback =
    new Image.GetThumbnailImageAbort(() => false);
b = (Bitmap)b.GetThumbnailImage(b.Width, b.Height, abortCallback, IntPtr.Zero);

答案 1 :(得分:-1)

我不确定这是否有帮助,但您可以尝试此代码并报告错误是否仍然存在?

private Bitmap rotateImage(Bitmap b, float angle)
{
    using (var returnBitmap = new Bitmap(b.Width, b.Height,System.Drawing.Imaging.PixelFormat.Format32bppArgb))
    {
        using (var g = Graphics.FromImage(returnBitmap))
        {
            g.TranslateTransform((float)b.Width / 2, (float)b.Height / 2);
            g.RotateTransform((int)angle);
            g.TranslateTransform(-(float)b.Width / 2, -(float)b.Height / 2);
            b = (Bitmap)b.GetThumbnailImage(b.Width, b.Height, null, IntPtr.Zero);
            g.DrawImage(b, new Point(0, 0)); // Is the error still present?
            return returnBitmap;
        }
    }
}