从内存中提取图像
本文关键字:图像 提取 内存 | 更新日期: 2023-09-27 18:01:50
我的程序一直抛出这个该死的错误,我完全不知道为什么。我已经在网上搜索了,但到目前为止,我还没有找到任何真正的答案。任何帮助都会很感激。谢谢。
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秒后。在此之前,程序运行良好。
在Microsoft docs for Image.GetThumbnailImage
中,它声明:
回调
类型:System.Drawing.Image.GetThumbnailImageAbort
形象。GetThumbnailImageAbort委托。
注意您必须创建一个委托并传递一个引用给该委托作为回调参数,但未使用委托。
也许你应该添加那个委托。
Image.GetThumbnailImageAbort abortCallback =
new Image.GetThumbnailImageAbort(() => false);
b = (Bitmap)b.GetThumbnailImage(b.Width, b.Height, abortCallback, IntPtr.Zero);
我不确定这是否有帮助,但您可以尝试此代码并报告错误是否仍然存在?
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;
}
}
}