将favicon检索为图标而不是图像

我使用我在这里找到的favicon代码来检索浏览器元素中加载的网站的favicon。

我想使用此favicon作为我的Windows窗体的图标。

感谢JP Hellemons,这段代码有效:

private void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { this.Icon = favicon(GetActiveBrowser().Url); } private WebBrowser GetActiveBrowser() { return (WebBrowser)tabs.SelectedTab.Controls[0]; } private Icon favicon(Uri url) { WebRequest request = (HttpWebRequest)WebRequest.Create("http://" + url.Host + "/favicon.ico"); Bitmap bm = new Bitmap(32, 32); MemoryStream memStream; using (Stream response = request.GetResponse().GetResponseStream()) { memStream = new MemoryStream(); byte[] buffer = new byte[1024]; int byteCount; do { byteCount = response.Read(buffer, 0, buffer.Length); memStream.Write(buffer, 0, byteCount); } while (byteCount > 0); } bm = new Bitmap(Image.FromStream(memStream)); if (bm != null) { Icon ic = Icon.FromHandle(bm.GetHicon()); return ic; } else return Properties.Resources.GZbrowser; } 

根据这个文档,它应该从流工作。 http://msdn.microsoft.com/en-us/library/system.drawing.icon.aspx

我用过这篇文章: http : //odetocode.com/Blogs/scott/archive/2004/10/05/webrequest-and-binary-data.aspx

 WebRequest request = (HttpWebRequest)WebRequest.Create("http://" + url.Host + "/favicon.ico"); Icon ic = new Icon(); // put default here Bitmap bm = new Bitmap(); try { using(WebResponse response = request.GetResponse()) { using(Stream responseStream = response.GetResponseStream()) { using(MemoryStream ms = new MemoryStream()) { var tmp = Image.FromStream(ms); // changed bitmap to image bm = new Bitmap(tmp); } } } }catch{} if(bm != null) { ic = Icon.FromHandle(bm.GetHicon); } return ic; 

编辑:这样的事情应该这样做

Edit2:在答案中改变了一些东西。 你能试试吗?

最终编辑:(笑)

刚刚在Windows窗体应用程序中测试了这个,这个工作! 🙂

 Uri url = new Uri("http://www.google.nl"); WebRequest request = (HttpWebRequest)WebRequest.Create("http://" + url.Host + "/favicon.ico"); Bitmap bm = new Bitmap(32,32); MemoryStream memStream; using (Stream response = request.GetResponse().GetResponseStream()) { memStream = new MemoryStream(); byte[] buffer = new byte[1024]; int byteCount; do { byteCount = response.Read(buffer, 0, buffer.Length); memStream.Write(buffer, 0, byteCount); } while (byteCount > 0); } bm = new Bitmap(Image.FromStream(memStream)); if (bm != null) { Icon ic = Icon.FromHandle(bm.GetHicon()); this.Icon = ic; } 

首先读取响应字节数组,然后创建它的MemoryStream并从该MemoryStream创建图标。

网络流不支持创建图标所需的搜索操作。