【问题标题】:a generic error occurred gdi+ c#发生一般错误 gdi+ c#
【发布时间】:2017-08-04 09:53:21
【问题描述】:

我想在旋转后以相同的名称和路径保存图像。 我在方法保存中遇到错误(发生一般错误 gdi+

代码如下:

string path = @"mypath";
Bitmap image = new Bitmap(path + aspximage.ImageUrl, true);
image.RotateFlip(System.Drawing.RotateFlipType.Rotate90FlipNone);
//The error is generated here
image.Save(path + aspximage.ImageUrl, ImageFormat.Png);
// I have added this line so that the browser can display it
aspximage.ImageUrl = aspximage.ImageUrl + "&t=" + DateTime.Now.Second;

我从硬盘驱动器中的本地路径获取我的图像。为此,我使用 ashx 处理程序,所以我的 imageUrl 类似于 "Handler.ashx?n=nameimage.png"

这里是 Handler.ashx 的代码:

public void ProcessRequest (HttpContext context) {

    string imgName = context.Request.QueryString["n"];
    context.Response.ContentType = "image/png";
    string path = @"myPath" + imgName;
    Image image = Image.FromFile(path);
    image.Save(context.Response.OutputStream, ImageFormat.Png);
}

如果我删除这一行

// I have added this line so that the browser can display it
aspximage.ImageUrl = aspximage.ImageUrl + "&t=" + DateTime.Now.Second;

我的代码运行良好,但浏览器无法重新加载我的图像。

如果我离开它,我的代码运行良好,但在同一图像上 3 次或更多次执行调用 后会生成错误。

你有什么建议?

感谢您的帮助。

【问题讨论】:

  • 您使用的是哪个版本的 DevExpress?这个问题可能不会在我们这边重现。您能否提供一个小型示例应用程序来重现该行为?很容易确定问题出在您的应用程序或控件中。 DevExpress 支持是提出看起来像控制错误而不是应用程序错误的问题的最佳场所..
  • 您好,谢谢您的回复,问题不在DevExpress控件中,即使我换了另一个控件asp我仍然有同样的错误。仅当我在图像 URL 中添加 DateTime.Now.Second 并且仅在对同一图像执行 3 次或更多次执行调用后才会生成错误。如果我删除 DateTime.Now.Second 浏览器不能再重新加载我的图像,因为 url 图像没有改变。您能否告诉我另一种将图像旋转 90° 并将其保存在我的路径中并在 JS(客户端)或(服务器端)中重新加载的解决方案?
  • 在对保存的图像进行旋转操作后,进行 ajax 调用,以 base64 字符串格式返回图像。

标签: c# image save devexpress gdi+


【解决方案1】:

我终于找到了错误。

将图像保存在 context.Response.outputStream "Handler.ashx"

中后,我应该关闭文件

为此我添加了 image.Dispose()

这是 Handler.ashx 的新代码:

public void ProcessRequest (HttpContext context) {

    string imgName = context.Request.QueryString["n"];
    context.Response.ContentType = "image/png";
    string path = @"mypath" + imgName;
    Image image = Image.FromFile(path);
    image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
    //I added this line
    image.Dispose();
}

【讨论】:

  • 更好的做法是将整个图像处理包装在using 块中。
猜你喜欢
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 2014-05-07
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
相关资源
最近更新 更多