【问题标题】:System.Drawing.Bitmap(int32,int32) parameter not valid in WPF but not win-formsSystem.Drawing.Bitmap(int32,int32) 参数在 WPF 中无效,但在 win-forms 中无效
【发布时间】:2013-07-02 17:35:42
【问题描述】:

我正在将一些代码从 Windows 窗体程序移动到 WPF 程序,并且在以下代码中遇到了错误。

    //our private vars
    private Bitmap bmp;
    private Graphics g;

    public NewFitnessCalculator()
    {
        bmp = new System.Drawing.Bitmap(Tools.MaxWidth, Tools.MaxHeight);
        g = Graphics.FromImage(bmp);
    }

错误表明new System.Drawing.Bitmap 的参数无效,但据我所知它们都是int(即使直接转换为int,问题仍然存在)。此外,此代码在 Windows 窗体版本中运行良好 - 我不确定这是否是 WPF 的问题。 在这种情况下,Tools.MaxWidth/Height 是来自另一个类的public static ints(也是public static)。它们被初始化为200,然后分别设置为另一个位图的宽度和高度。

任何帮助将不胜感激。

【问题讨论】:

  • 你传入的值是什么,看看这个stackoverflow.com/questions/5801652/…
  • 我遇到了值为 465 的错误 - 这应该不会因为太大而导致任何错误,不是吗?
  • 您是否有多个引用同名类的using 语句?尝试删除System.Drawing using 语句并显式调用System.Drawing.Graphics.FromImage
  • 我仅有的两个类似的using 语句是System.DrawingSystem.Drawing.Imaging(如果我删除其中一个,我会得到错误)。另外,我不想复制我的输入图像,只需使用它的尺寸。
  • 当程序的可用非托管堆空间非常低时,可能会引发此异常。您遗漏了“有关程序内存使用情况的一些提示”的详细信息。

标签: c# wpf


【解决方案1】:

内存使用量约为 1,400 MB

目前尚不清楚这是工作集大小还是进程的 VM 大小。如果您使用任务管理器,那么您通常会查看工作集,即程序使用的 RAM 数量。

在这种情况下,1400 兆字节肯定会让您处于 32 位进程的危险区域。当进程的 VM 大小 接近 32 位进程可以寻址的最大虚拟内存量(2 GB)时,分配开始失败。您几乎可以肯定非常接近该限制。

将失败的分配类型是大的,地址空间中没有足够大的孔来容纳请求的大小。位图无疑是一个非常好的候选者,因为它们可以为像素数据消耗大量的 VM 空间。

在这种情况下,您可能会遇到 OutOfMemoryException。但是 GDI+ 会产生糟糕的异常,它假定真正的问题是您要求的位图太大。这并非完全没有优点,但是当您创建一个 465 x 465 像素的位图时,它会变得有点难卖。 Anyhoo,它会生成“参数无效”异常消息而不是 OOM,归咎于您请求的大小。

目前还不清楚您是如何使用这么多内存的。但是,当您在 .NET 代码中使用 Bitmap 类时,这是非常常见的,这是一个您不能再忽略 Dispose() 方法的 .NET 类。强烈暗示您不注意这一点是您将其预先分配为 200x200 位图的评论。这是一个非常糟糕的主意,您几乎肯定不会丢弃它。

因此,您需要做的第一件事就是彻底检查您的代码,并在不再使用位图时将其处理掉。如有必要,请使用内存分析器来查找泄漏。将 EXE 项目的平台目标设置从 x86 更改为 AnyCPU 是在 64 位操作系统上获得大量 VM 空间的一种非常简单的方法。从长远来看,您可能最终还是会使用 BitmapSource 和 WriteableBitmap 类替换此代码。

【讨论】:

    【解决方案2】:

    WPF 中有 BitmapEffect 而不是 Bitmap

    【讨论】:

    猜你喜欢
    • 2012-01-14
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 2012-04-24
    • 2013-03-15
    • 1970-01-01
    相关资源
    最近更新 更多