使用SaveFileDialog后,在Bitmap.Save()的GDI +上发生一般错误
我在using块中使用了以下代码块和更多代码:
using (System.Drawing.Bitmap tempImg = (System.Drawing.Bitmap)tempObj.GetData(System.Windows.Forms.DataFormats.Bitmap)) { // ... tempImg.Save("..\..\testdata\tempImg.bmp", ImageFormat.Bmp); // ... }
但我仍然得到错误:
GDI +发生了一般错误
只有在我做了一些与使用块内的代码无关的动作之后。 在其他时候,这很好。 tempImg.bmp也是一个临时文件,因此我删除了using块本身中的tempImg.bmp。
由于tempImg在使用中并且它被处理掉了,我认为应该解决锁定问题。
有人可以让我知道这段代码中的错误是什么?
编辑: System.Drawing.Image
到System.Drawing.Bitmap
作为tempImg
的类型。
编辑:我发现只有在创建了SaveFileDialog并且用户点击“保存”后才会出现此错误。
最后,我可以找到我的代码中的错误,并想在此提及,因为我认为它可能对某些人有用….
由于我在tempImg.Save中给出了一个相对路径,并且在用户单击SaveFileDialog中的“Save”之后,tempImg.Save的实际路径变为:
SaveFileDialog指定的路径+相对路径
自动。
因此,如果路径不存在,则会发生此错误。
感谢每一个人的答案。
我也遇到过这个问题 – 它发生的原因是因为位图锁定而你无法保存它(如果你想我能找到确切的解释)所以无论如何解决这个问题:创建一个原始位图大小的新位图你将原始位图复制到新创建的位图,然后处理原始位图并保存新位图。
Bitmap bm3 = new Bitmap(bm2);
然后保存。
这通常表明其他东西,可能是您自己的应用程序中的某些其他线程,已经存在您尝试在文件系统级别锁定的目标文件。 如果你看一下内部exception,我相信它应该提到这一点。 如果它不是直接在InnerException中另一种确认这一点的方法(或者发现它实际上可能是什么)是在调试器中打开第一次机会exception,并观察在“下面”抛出什么exception保存然后转为此一般例外。
尝试了这里给出的所有解决方案,但都是徒劳的。 最终找到了解决方案。
- 处理在image上应用的任何图形:
g.dispose();
- 确保存在保存路径:
System.IO.Directory.Exists(dir);
这是一个ASP.NET应用程序吗?
在asp.net中的GDI +发生了一般错误,主要是因为缺少目标文件夹/访问权限。
您的代码也可以简化为:
using (Image image= dataObject.GetImage()) { if (image != null) { image.Save("test.bmp"); } }
在Bitmap的GDI +上发生一般错误。当文件夹受到保护或文件名无效时,通常会收到通常的错误。
一个常见的错误是忘记创建一个名称,只是单独编写文件夹名称。
在我的例子中,它是一个ASP.NET应用程序,我在其中替换了一个DLL,我不得不在部署后简单地重新启动应用程序池。 然后它工作正常。
这是Microsoft论坛的代码示例。
// new image with transparent Alpha layer using (var bitmap = new Bitmap(330, 18, PixelFormat.Format32bppArgb)) { using (var graphics = Graphics.FromImage(bitmap)) { // add some anti-aliasing graphics.SmoothingMode = SmoothingMode.AntiAlias; using (var font = new Font("Arial", 14.0f, GraphicsUnit.Pixel)) { using (var brush = new SolidBrush(Color.White)) { // draw it graphics.DrawString(user.Email, font, brush, 0, 0); } } } // setup the response Response.Clear(); Response.ContentType = "image/png"; Response.BufferOutput = true; // write it to the output stream bitmap.Save(Response.OutputStream, ImageFormat.Png); Response.Flush(); }
我试图从资源中保存图像,当我直接使用方法Bitmap.Save(filepath)时,它给了我太GDI错误。 我想我们可以通过克隆任何其他位图图像使用相同的下面的代码。
Private void SaveResourceImage() { object resBmpObject = Resource.Image1.Clone();//Bitmap Image from resource file //object resBmpObject = anyBmpImage.clone(); //for image other than resource image Bitmap resBmpImage = (Bitmap)resBmpObject; resBmpImage.Save(destFilePath, System.Drawing.Imaging.ImageFormat.Png); resBmpImage.dispose(); }
保存图像后处理你的bitMap
对象:
bitMap.Dispose() oimg.Dispose() bitMap = Nothing oimg = Nothing
在我的情况下,我将位图文件保存在与源相同的位置,这就是问题所在。 我将位图保存到新位置,现在一切都很好。
我面临同样的问题,将图像类型“.bmp”更改为“.png”,这是我的工作
上述就是C#学习教程:使用SaveFileDialog后,在Bitmap.Save()的GDI +上发生一般错误分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/958800.html