gpt4 book ai didi

c# - 使用位图调整大图像大小的 OutOfMemoryException

转载 作者:行者123 更新时间:2023-11-30 21:52:42 27 4
gpt4 key购买 nike

我想调整我网站中图片的大小,但是当我使用 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);

最佳答案

确保您拥有 gcAllowVeryLargeObjects在您的配置文件中将元素设置为 true

.NET 中的单个分配最大为 2 GB(即使作为 64 位进程运行时也是如此),并且您正在使用的其中一个类很可能在内部执行某些操作,从而达到此限制。这是一个非常普遍的问题,修复您的配置文件应该可以解决这个问题。

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

关于c# - 使用位图调整大图像大小的 OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34577762/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com