检索图标作为图标,而不是图像 [英] Retrieving favicon as icon instead of image

查看:160
本文介绍了检索图标作为图标,而不是图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用favicon- code,我发现的这里检索浏览器加载元素网站的图标。

我想用这个图标作为我的Windows窗体的图标。

感谢 JP Hellemons 这code工作:

  browser_DocumentCompleted私人无效(对象发件人,WebBrowserDocumentCompletedEventArgs E){
    this.Icon =图标(GetActiveBrowser()网址。);
}私人web浏览器GetActiveBrowser(){
    返回(web浏览器)tabs.SelectedTab.Controls [0];
}私人图标图标(URI URL){
    WebRequest的要求=(HttpWebRequest的)WebRequest.Create(HTTP://+ url.Host +/favicon.ico);    位图BM =新位图(32,32);
    MemoryStream的memStream;    使用(流响应= request.GetResponse()。GetResponseStream()){
        memStream =新的MemoryStream();
        字节[]缓冲区=新的字节[1024];
        INT BYTECOUNT;        做{
            BYTECOUNT = response.Read(缓冲液,0,buffer.Length);
            memStream.Write(缓冲液,0,BYTECOUNT);
        }而(BYTECOUNT大于0);
    }    BM =新位图(Image.FromStream(memStream));    如果(BM!= NULL){
        图标IC = Icon.FromHandle(bm.GetHicon());
        返回大陆;
    }其他
        返回Properties.Resources.GZbrowser;
}


解决方案

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

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

 的WebRequest请求=(HttpWebRequest的)WebRequest.Create(HTTP://+ url.Host +/favicon.ico);
图标IC =新图标(); //把这里默认
位图BM =新位图();尝试
{
    使用(WebResponse类响应= request.GetResponse())
    {
       使用(流responseStream = response.GetResponseStream())
       {
          使用(MemoryStream的毫秒=新的MemoryStream())
          {
              变种TMP = Image.FromStream(毫秒); //改变位图图像
              BM =新位图(TMP);
          }
       }
    }
}抓住{}
如果(BM!= NULL)
{
    IC = Icon.FromHandle(bm.GetHicon);
}
返回大陆;

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

EDIT2:改变了一些事情的答案。你可以试试这个?

最后编辑:(笑)

就在Windows窗体应用程序测试,这个和这个作品! :)

 乌里URL =新的URI(http://www.google.nl);
WebRequest的要求=(HttpWebRequest的)WebRequest.Create(HTTP://+ url.Host +/favicon.ico);位图BM =新位图(32,32);
MemoryStream的memStream;使用(流响应= request.GetResponse()。GetResponseStream())
{
    memStream =新的MemoryStream();
    字节[]缓冲区=新的字节[1024];
    INT BYTECOUNT;    做
    {
        BYTECOUNT = response.Read(缓冲液,0,buffer.Length);
        memStream.Write(缓冲液,0,BYTECOUNT);
    }而(BYTECOUNT大于0);
}BM =新位图(Image.FromStream(memStream));如果(BM!= NULL)
{
    图标IC = Icon.FromHandle(bm.GetHicon());
    this.Icon = IC;
}

I used the favicon-code I found here to retrieve the favicon of the site loaded in the browser element.

I want to use this favicon as the icon of my Windows Form.

Thanks to JP Hellemons this code works:

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

解决方案

According to this documentation, it should work from stream. http://msdn.microsoft.com/en-us/library/system.drawing.icon.aspx

I used this article: 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;

Edit: something like this should do it

Edit2: changed some things in the answer. Can you try this?

Final edit: (lol)

Just tested this in a windows form app and this works! :)

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

这篇关于检索图标作为图标,而不是图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆