尝试保存使用WebClient下载的图像时,GDI +中发生了一般性错误

时间:2013-12-25 09:14:02

标签: c# .net gdi+

我编写的代码一直存在问题。这段代码的作用是从我的服务器下载一张图片并将其放入PDF文档中。我已将其缩小到正在下载图像的问题。

起初,我认为这是我的项目的一个问题,所以我创建了一个新的控制台应用程序,只用该代码来测试它 - 但这也发生在它上面。

我正在尝试做的很简单 - 使用WebClient下载图片并将其保存到磁盘:

WebClient oWebClient = new WebClient();
byte[] oImageBytes = oWebClient.DownloadData("http://images1.ynet.co.il/PicServer3/2013/12/25/5058381/505838001000100396220.jpg");

ImageConverter oConverter = new ImageConverter();
Image oImg = (Image)oConverter.ConvertFrom(oImageBytes);

oImg.Save("d:\\temp\\1.jpg");

示例中的图片网址来自本地新闻网站,但也失败了。

非常奇怪的是,在Windows 7及更早版本上它可以工作。它在Windows8和Windows Server 2012上失败,并出现以下错误:

An unhandled exception of type 'System.Runtime.InteropServices.ExternalException' occurred in System.Drawing.dll

Additional information: A generic error occurred in GDI+.

这是StackTrace:

at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)
at System.Drawing.Image.Save(String filename, ImageFormat format)
at System.Drawing.Image.Save(String filename)
at ConsoleApplication1.Program.Main(String[] args) in c:\Users\Ophir\Documents\Visual Studio 2013\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs:line 23
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

我尝试过在网上搜索,但我发现的所有解决方案都不适用于我的情况。

我尝试保存的目录具有足够的权限。

任何人都知道为什么会这样?

由于

1 个答案:

答案 0 :(得分:1)

按原样保存数据怎么样?

byte[] oImageBytes = oWebClient.DownloadData("http://images1.ynet.co.il/PicServer3/2013/12/25/5058381/505838001000100396220.jpg");

File.WriteAllBytes("d:\\temp\\1.jpg", oImageBytes);