C# “ASP.NET”;GDI+;中发生一般性错误&引用;仅适用于Vista计算机上的PNG图像
我一直在寻找解决这个令人烦恼的问题的方法,并找到了很多答案,不幸的是,这些答案似乎对我不起作用 我有以下ASP.NET代码,可以将图像以JPEG或PNG格式输出到web浏览器:C# “ASP.NET”;GDI+;中发生一般性错误&引用;仅适用于Vista计算机上的PNG图像,c#,asp.net,gdi+,C#,Asp.net,Gdi+,我一直在寻找解决这个令人烦恼的问题的方法,并找到了很多答案,不幸的是,这些答案似乎对我不起作用 我有以下ASP.NET代码,可以将图像以JPEG或PNG格式输出到web浏览器: public partial class MyImg : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { using(Bitmap bmp = new Bitmap(880, 520)) {
public partial class MyImg : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
using(Bitmap bmp = new Bitmap(880, 520))
{
using (System.Drawing.Graphics gfx = System.Drawing.Graphics.FromImage(bmp))
{
try
{
gfx.Clear(Color.Aqua);
// finalizeOutput(bmp, gfx, MyImageType.SCGIT_JPEG); //Works
finalizeOutput(bmp, gfx, MyImageType.SCGIT_PNG); //DOES NOT Work
}
catch (Exception ex)
{
}
}
}
}
protected void finalizeOutput(System.Drawing.Graphics gfx, Bitmap bmp, MyImageType imageType)
{
//Get image type
ImageFormat imgFmt;
string strContentType;
switch (imageType)
{
case MyImageType.SCGIT_GIF:
strContentType = "image/gif";
imgFmt = ImageFormat.Gif;
break;
case MyImageType.SCGIT_PNG:
strContentType = "image/png";
imgFmt = ImageFormat.Png;
break;
default:
strContentType = "image/jpeg";
imgFmt = ImageFormat.Jpeg;
break;
}
//Finalizing and Cleaning Up
Response.ContentType = strContentType;
bmp.Save(Response.OutputStream, imgFmt); //THROWS EXCEPTION for png type: "A generic error occurred in GDI+."
// bmp.Dispose();
// gfx.Dispose();
Response.End();
}
}
所发生的事情是,上述方法从安装在Windows 7上的VS2010开发IIS中可以完美地工作,但当我在Vista上尝试完全相同的代码时,它抛出了“GDI+中发生的一般错误”异常,但仅对图像类型PNG有效,对JPEG有效
知道如何解决这个问题吗?那些
bmp
和gfx
变量在哪里初始化?IDisposable资源(如位图和图形)应尽可能短,并始终使用块包装,以避免泄漏句柄并确保正确处理。它们在我准备图像时在页面加载中初始化。然后调用finalizeOutput将其输出到浏览器。我建议您使用相同的方法执行此操作,并使用语句将这些IDisposable对象包装起来。好的,我会的。但这会如何影响这个异常呢?我想看看您在哪里实例化这些gfx和bmp变量。我甚至没有注意到你更新了你的帖子。我告诉过你使用语句。不呼叫。请手动处理。