我更改Automatic Image Stitching with Accord.NET应用程序以拼接多个文件
我在for loop
代码上放了一个btnDoItAll
,循环将取决于要拼接的图像数量。
我在循环结束时加入了一个裁剪代码。你可以看到here
出现了一个错误,在此部分中表示OutOfMemoryException was unhandled - Out of memory
。
croppedBitmap = croppedBitmap.Clone(new Rectangle(MinWidth, 0, (int)croppedBitmap.Width - MinWidth - MaxWidth, 1323), System.Drawing.Imaging.PixelFormat.DontCare);
希望你能再次帮助我。
The output from debug was these:
Bitmap-width: 877
Bitmap-height: 1325
Width: -1
MinWidth: 877
A first chance exception of type 'System.OutOfMemoryException' occurred in System.Drawing.dll
答案 0 :(得分:1)
几小时前我遇到了类似的问题,检查克隆的界限。如果你移出你的位图,它将抛出这个异常。
所以请注意这种情况。
1: MinWidth + (int)croppedBitmap.Width - MinWidth - MaxWidth <= croppedBitmap.Width
2: 0 + 1323 <= croppedBitmap.Height
如果我的猜测是正确的1&amp; 2未实现
编辑: 在Clone前添加此内容并将结果发布到您的帖子中
Debug.WriteLine("Bitmap-width: "+croppedBitmap.Width);
Debug.WriteLine("Bitmap-height: "+croppedBitmap.Height);
Debug.WriteLine("Width: "+(croppedBitmap.Width - MinWidth - MaxWidth));
Debug.WriteLine("MinWidth: "+MinWidth);
EDIT2: 你的宽度是&lt; 0(在这种情况下为-1)不应该是这种情况 2.即使它是> 0会导致错误,因为877 + x是> 0 croppedBitmap.Width不允许
所以我从一开始就说的是你必须确保你的宽度和高度必须大于0并且你的矩形的宽度+ MinWidth和高度+ 0的总和不得超过边界你的形象。
现在你的矩形看起来像这样:
new Rectangle(877, 0, -1, 1323) // Rectangle(posx, posy, width, height)
所以你可以看到宽度是负的,这不是你想要的,它必须大于0.所以如果你现在就这样做:
new Rectangle(877, 0, 1, 1323)
因为你的矩形是从877到878(x坐标),所以仍然是错误的,因为你的图像只有877像素宽。这意味着MinWidth
和(int)croppedBitmap.Width - MinWidth - MaxWidth
是错误的。你必须确保你的价值观不会引起这些问题。
复制方法不是问题,而是传递参数的问题。你必须在传递它们之前检查它们!