2

我想在我的网站中调整图像的大小,但是当我使用 Bitmap 加载 14032*19864(png 扩展名)的图像时,OutOfMemoryException会抛出一个。我的编译器配置是any cpu. 我在怀疑运行环境是否是x64. 代码如下:

public ActionResult BimDWGViewer()
{
    Viewer.Uri uri = null;
    string url = Request.Params["u"];
    uri = new Viewer.Uri("image@"+url);
    int width = Int32.Parse(Request.Params["w"]);
    int height = Int32.Parse(Request.Params["h"]);
    Nebula.Nexus.Helpers.ModelUriTranslator.TranslateUri(uri);
    if (uri.IsFileProtocol)
    {
        string path = uri.Path;
        System.Drawing.Bitmap image_source = new System.Drawing.Bitmap(path);
        System.Drawing.Bitmap image_result = new System.Drawing.Bitmap(width,height);
        using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image_result))
        {
            g.DrawImage(image_source, new System.Drawing.Rectangle(0, 0, width, height), new System.Drawing.Rectangle(0, 0, image_source.Width, image_source.Height), System.Drawing.GraphicsUnit.Pixel);
        }
        MemoryStream output = new MemoryStream();
        image_result.Save(output, System.Drawing.Imaging.ImageFormat.Png);
        byte[] res = output.ToArray();
        output.Dispose();
        image_source.Dispose();
        image_result.Dispose();
        return new FileContentResult(res, "image/png");
    }

}

异常发生在以下行

System.Drawing.Bitmap image_source = new System.Drawing.Bitmap(path);
4

2 回答 2

3

确保在配置文件中将gcAllowVeryLargeObjects元素设置为true

.NET 中的单个分配最大为 2 GB(即使作为 64 位进程运行),并且您正在使用的其中一个类很可能在内部做一些会碰到这个限制的事情。这是一个非常常见的问题,修复配置文件应该可以解决它。

更新:根据下面的评论,@majing 遇到的问题是 Visual Studio 在 32 位版本的 IIS Express 中启动他的 Web 应用程序。将 VS 配置为以 64 位进程启动 IIS 解决了该问题。

于 2016-01-03T17:09:58.160 回答
0

您是否禁用了“首选 32 位”?

http://www.neovolve.com/2015/07/31/disable-prefer-32-bit/

于 2016-01-03T16:56:09.550 回答