保存位图导致通用 GDI+ 错误

3

我一直在寻找解决这个问题的方法,但是没有真正找到一个。以下是我一直试图让它工作但没有成功的拼凑代码。

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个回答

1

通常这是一个权限错误。


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);
      }
   }
}

这仍然会出现错误,对于那些无法工作的URL而言,它仍然无法正常运行;而对于那些可以工作的URL而言,它则能够正常运行。 - Dacto

0

我发现如果我将您的图像保存为bmp格式,它可以正常工作。我还检查了您的第一张图片的DPI比第二张高得多。希望这是您可以继续进行的线索。


我想知道为什么 BMP 可以工作,而 JPEG、PNG 和其他所有格式都不能工作。 - Dacto


0
每当我遇到这个问题时,我经常发现是因为尝试保存到无效或无法访问的路径。在保存函数上设置断点,检查输出路径,然后尝试通过文件浏览器访问相同的路径是验证您没有拼写错误的快速方法。如果它确实存在,那么我会检查权限。
希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接