为什么会出现内存不足异常?
所以这在 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/