我一直在寻找解决方案,但还没找到。 这是一些拼凑而成的代码,我一直在尝试使其工作但没有成功。
private Image GetAlbumArt(String url)
{
byte[] rBytes;
Image Testing;
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
WebResponse myResponse = myRequest.GetResponse();
Stream rStream = myResponse.GetResponseStream();
using (BinaryReader br = new BinaryReader(rStream))
{
rBytes = br.ReadBytes(1000000);
br.Close();
}
myResponse.Close();
using (MemoryStream imageStream = new MemoryStream(rBytes, 0, rBytes.Length))
{
imageStream.Write(rBytes, 0, rBytes.Length);
Testing = Image.FromStream(imageStream, true);
Testing.Save("temp.jpg"); //Error here!
}
return Testing;
}
我实际上宁愿不保存位图,只是将位图返回到父函数,但这也没有用。 (如果要使用位图,则无法关闭内存流)
真正奇怪的是,如果我给它一个不同的jpg网址,这可以正常工作。
不起作用:http://2.images.napster.com/mp3s/2492/resources/207/116/files/207116316.jpg
有效:http://3.images.napster.com/mp3s/2256/resources/301/404/files/301404546.jpg
答案 0 :(得分:1)
通常这是权限错误。
答案 1 :(得分:0)
我发现如果将图像保存到bmp并且工作正常。我还检查了你的第一张图片的DPI远高于第二张图片。希望这是你可以通过的线索。
答案 2 :(得分:0)
嗯,这是我编写的一些代码的片段,用来做同样的事情
WebClient webClient = new WebClient();
using (Stream stream = webClient.OpenRead(imgeUri))
{
using (Bitmap bitmap = new Bitmap(stream))
{
stream.Flush(); // not really necessary, but doesnt hurt
stream.Close();
try
{
// now, lets save to a memory stream and
// return the byte[]
MemoryStream ms = new MemoryStream();
// doesnt have to be a Png, could be whatever you want (jpb, bmp, etc.)
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
return ms.GetBuffer()
}
catch (Exception err)
{
Console.WriteLine("{0}\t\tError: {1}", id, err.Message);
}
}
}
答案 3 :(得分:0)
以下是对该错误的良好讨论: http://weblogs.asp.net/anasghanem/archive/2009/02/28/solving-quot-a-generic-error-occurred-in-gdi-quot-exception.aspx
答案 4 :(得分:0)
每当我遇到这个问题时,我经常会发现要尝试保存到无效或无法访问的路径。
在保存功能上粘贴断点,检查输出路径,然后尝试通过文件浏览器访问此相同路径,这是验证您没有拼错任何内容的快速方法。如果确实存在,我会检查权限。
希望有所帮助