在图形对象上绘制图像时的通用错误

本文关键字:错误 图像 图形 对象 绘制 | 更新日期: 2023-09-27 18:12:02

考虑以下在windows服务中运行的代码:

Graphics g = Graphics.FromImage(printImage);
for (int rows = 1; rows <= thumbRows; rows++) {
    for (int cols = 1; cols <= thumbColumns; cols++) {
      using (Image thumbImage = new Bitmap(resourceQueue.Peek()))
      {  
          g.DrawImage(thumbImage, targetRect, sourceRect, GraphicsUnit.Pixel);
          resourceQueue.Dequeue();
          if (resourceQueue.Count == 0) break;
      }
    }
}

代码在将图像缩小到另一个图像上后绘制一个图像列表。它在大多数情况下工作良好,但有时会在Image thumbImage = new Bitmap的循环中间抛出异常。异常是"在GDI+中发生了一个通用错误"。无论使用什么图像,它总是在创建第13个图像之后发生。

在谷歌搜索后,似乎这是保存文件时常见的问题,但这里的区别是没有文件被保存。在图形对象上绘制图像。

有人知道如何解决这个问题吗?

在图形对象上绘制图像时的通用错误

很可能用于创建位图的流(如果它是的话)已关闭。它们必须在位图的生命周期内保持开放。你可以把这个流复制到一个新的MemoryStream中,然后关闭原来的。