为什么会出现内存不足异常?

所以这在 C# 中第一次通过:

splitBitmaps.Add(neededImage.Clone(rectDimensions, neededImage.PixelFormat));

其中 splitBitmaps 是一个 List 但这在 VB 中至少可以工作 4 次迭代:

arlSplitBitmaps.Add(Image.Clone(rectDimensions, Image.PixelFormat))

其中 arlSplitBitmaps 是一个简单的数组列表。 (是的,我在 c# 中尝试过 arraylist)

这是全文:

for (Int32 splitIndex = 0; splitIndex <= numberOfResultingImages - 1; splitIndex++)
{
  Rectangle rectDimensions;

  if (splitIndex < numberOfResultingImages - 1)
  {
    rectDimensions = new Rectangle(splitImageWidth * splitIndex, 0,
      splitImageWidth, splitImageHeight);
  }
  else
  {
    rectDimensions = new Rectangle(splitImageWidth * splitIndex, 0,
     sourceImageWidth - (splitImageWidth * splitIndex), splitImageHeight);
  }

  splitBitmaps.Add(neededImage.Clone(rectDimensions, neededImage.PixelFormat));

}

顺便说一下,需要的图像是位图。

我在 intarweb 上找不到任何有用的答案,尤其是为什么它在 VB 中工作得很好。

更新:

我实际上找到了这个工作的原因(有点),但忘了发布它。如果我记得,它与将图像转换为位图有关,而不仅仅是尝试克隆原始图像。

最佳答案

当 Rectangle 中指定的坐标超出位图边界时,Clone() 也可能抛出内存不足异常。它不会自动为您剪辑它们。

关于C# Image.Clone 内存不足异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/199468/

10-15 15:37