发生了一般错误gdi + c#

时间:2017-08-04 09:53:22

标签: c# image save devexpress gdi+

我想在旋转后保存具有相同名称和路径的图像。 我在方法保存中出错( 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次或更多次执行调用之后生成的。

你的建议是什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

最后我发现了错误。

我应该在上下文中保存图片后关闭文件.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();
}