c# - 将网站图标检索为图标而不是图像

标签 c# image browser icons favicon

我使用了我找到的网站图标代码 here检索浏览器元素中加载的站点的图标。

我想将此网站图标用作我的 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;
}

关于c# - 将网站图标检索为图标而不是图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9104653/

相关文章:

C# 匿名对象作为参数不起作用

c# - Simple Injector 条件注入(inject)

javascript - 什么会导致浏览器不执行脚本?

javascript - Safari iOS 13 文本缩放 - 修复网页

c# - TFS WorkItemChangedEvent 触发两次

c# - C#中小时和分钟的时间跨度计算

java - 将图像从 Java 客户端发送到 Python 服务器时图像文件损坏

css - 使用 Bootstrap 我想在较小的设备上将图像缩放到最小高度

ios - 如何在 Swift 中为 UIImage 着色?

Javascript 或长号码的浏览器?