Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 保存位图将导致通用GDI+;错误_C#_.net_Gdi+ - Fatal编程技术网

C# 保存位图将导致通用GDI+;错误

C# 保存位图将导致通用GDI+;错误,c#,.net,gdi+,C#,.net,Gdi+,我一直在寻找解决这个问题的方法,但还没有真正找到。 这里有一些补丁代码,我一直在玩,试图让这个工作,但没有成功 private Image GetAlbumArt(String url) { byte[] rBytes; Image Testing; HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url); WebResponse myResponse = myRequest.GetRes

我一直在寻找解决这个问题的方法,但还没有真正找到。 这里有一些补丁代码,我一直在玩,试图让这个工作,但没有成功

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 url,它就可以正常工作

不起作用:


工作原理:

通常这是一个权限错误。

我发现如果我将您的图像保存到bmp,它工作正常。我还检查了第一张图像的DPI比第二张图像高很多。希望这是您可以理解的线索。

好吧,这里是我为完成相同任务而编写的一些代码的片段

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

下面是关于该错误的一个很好的讨论:

每当我遇到这个问题时,我常常发现问题的根源在于试图保存到无效或无法访问的路径

在save函数上粘贴一个断点,检查输出路径,然后尝试通过文件资源管理器访问同一路径,这是一种验证您没有拼写错误的快速方法。如果它确实存在,我会检查权限


希望这有帮助

对于不起作用的url和起作用的url,这仍然是错误的。我想知道为什么bmp可以工作,而jpeg和png以及其他所有格式都不能工作。