我的程序不断抛出这个错误,我完全不知道为什么。我已经搜索过互联网,但到目前为止我还没有找到任何真正的答案。任何帮助,将不胜感激。感谢。
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秒后。在此之前,该程序运行良好。
答案 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;
}
}
}