检索图标作为图标,而不是图像 [英] Retrieving favicon as icon instead of image
问题描述
我用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屋!