创建位图时的OutOfMemory异常C#

时间:2015-07-31 16:43:36

标签: c# .net image-processing bitmap

所以如果我错了,请纠正我,并且那里已经有了重复 - 但我过去几个小时都在拖着堆栈和绞尽脑汁而且我无法解决这个问题。 / p>

我编写了一个基本的,单线程的递归文件爬行系统,它将查找它可以找到的任何图像文件并将其加载到数组中。然后将数组传递给迭代数组并检查每个图像的大小(H,W)的方法 - 如果它满足最低要求,则将其保存到新的最终数组中,如果不存在,则为简单地忽略了。

我尝试使用USING语句创建所有的Bitmaps,以确保尽可能少地创建垃圾......但是,我仍然会出现内存异常。以下是我的代码片段:

foreach (string current in scaledList)
{
    using (Bitmap bitmap = new Bitmap(current))
    {
        Bitmap bitmap2 = bitmap;
        float num5 = (float)(bitmap.Width / num2 * (bitmap.Height / num2));
        float num6 = (float)Vision.DetectSkin(bitmap, ref bitmap2, num2, iValue, hueMin, hueMax);
        num7 = num6 / num5 * 100f;
        bitmap2.Dispose();
    }
}

排除并抛出异常的行是:

using (Bitmap bitmap = new Bitmap(current))

这很有趣,因为该程序在未调用Vision.DetectSkin方法时有效。但是 - 在完成文件爬行和缩放处理后,只有当Vision类没有被注释掉时,违规行才会抛出错误。

Anywyas,所有帮助将不胜感激!提前致谢

1 个答案:

答案 0 :(得分:3)

如果您提到<Style x:Key="RbVisibilityStyle" TargetType="{x:Type RadioButton}"> <Setter Property="Visibility"> <Setter.Value> <MultiBinding Converter="{StaticResource RouterViaTagVisibilityConverter"> <Binding Path="Value1" RelativeSource="{RelativeSource Self}" /> <Binding Path="Value2" RelativeSource="{RelativeSource Self}" /> <Binding Path="Tag" RelativeSource="{RelativeSource Self}" /> </MultiBinding> </Setter.Value> </Setter> </Style> 来自http://www.codeproject.com/Articles/8127/Skin-Recognition-in-C

,那将会很有帮助

以下是相关代码,为简洁起见删除了注释。请注意,它在第一行上生成Vision.DetectSkin对象,但根本不使用它。 Graphics实施Graphics但它没有被处置;换句话说,代码将位图加载到另一种格式,不对它做任何事情,然后不处理它。我会尝试删除该行,看看你的问题是否消失。

仅仅因为它在CodeProject上并不意味着它是好的,经过测试和调试的代码......

IDisposable