保存位图会导致Generic GDI +错误

时间:2011-07-19 01:54:26

标签: c# .net gdi+

我一直在寻找解决方案,但还没找到。 这是一些拼凑而成的代码,我一直在尝试使其工作但没有成功。

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

5 个答案:

答案 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)

答案 4 :(得分:0)

每当我遇到这个问题时,我经常会发现要尝试保存到无效或无法访问的路径。

在保存功能上粘贴断点,检查输出路径,然后尝试通过文件浏览器访问此相同路径,这是验证您没有拼错任何内容的快速方法。如果确实存在,我会检查权限。

希望有所帮助