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以及其他所有格式都不能工作。