为什么我会出现内存不足异常?
所以这首次在C#中死掉了:
splitBitmaps.Add(neededImage.Clone(rectDimensions,neededImage.PixelFormat));
其中splitBitmaps是List <BitMap>但是这在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));
Run Code Online (Sandbox Code Playgroud)
}
aptImage顺便说一句就是Bitmap.
我在intarweb上找不到任何有用的答案,尤其不是为什么它在VB中运行得很好.
更新:
我实际上找到了这个工作的原因(但有点),但忘了发布它.它与将图像转换为位图有关,而不仅仅是在我记得的情况下尝试克隆原始图像.
我有一块从客户那里收到的产品图片.每个产品图像是一个东西的图片,它是用白色背景拍摄的.我想裁剪图像的所有周围部分,但只留下产品在中间.这可能吗?
举个例子:[ http://www.5dnet.de/media/catalog/product/d/r/dress_shoes_5.jpg] [1 ]
我不希望删除所有白色像素,但是我希望裁剪图像,使最顶部的像素行包含一个非白色像素,最左边的垂直像素行包含一个非白色像素,底部 - 大多数水平像素行包含一个非白色像素等.
C#或VB.net中的代码将不胜感激.
假设我有一个System.Drawing.Bitmap32bpp的ARGB模式.这是一个很大的位图,但它主要是完全透明的像素,在中间某处有一个相对较小的图像.
什么是快速算法来检测"真实"图像的边框,所以我可以裁掉周围的所有透明像素?
或者,我可以使用.Net中的功能吗?