cs_Yxion
Messages postés219Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 7 septembre 2009
-
1 oct. 2007 à 17:54
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 2014
-
2 oct. 2007 à 13:51
Bonjour,
J'essaie de récupérer le favicon d'un site pour le WebBrowser, mais j'ai un gros pb. En gros, voila un code qui fonctionne :
WebResponse webResponse = webRequest.GetResponse();
if (webResponse.ContentLength > 0)
using (Stream stream = webResponse.GetResponseStream())
{
FileStream fs = new FileStream(@"D:\Users\Sebastien\Documents\icon.ico", FileMode.OpenOrCreate);
byte[] b = new byte[1024];
int read = 0;
while ((read = stream.Read(b, 0, b.Length)) > 0)
fs.Write(b,0,b.Length);
fs.Close();
this._favIcon = new Icon(@"D:\Users\Sebastien\Documents\icon.ico");
}
webResponse.Close();
Mais j'aimerais que ca fonctionne sans fichier, soit poser le Stream dans un Image.FromStream(stream), soit directement dans new Icon(stream);
Mais à ce moment la, ca ne marche plus pour new Icon(stream); et ca marche avec Image.FromStream sur google, microsoft... mais pas sur Codes-Sources, developpez.com....
A noter, pour les sites ou cela marche, IE indique l'encodage des pages en UTF-8, les autres, c'est en ISO... je ne sais pas si ca peux correspondre ou si c'est le hasard.
cs_Yxion
Messages postés219Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 7 septembre 2009 2 oct. 2007 à 10:03
En faite, je fais avant avec le MemoryStream, j'ai essayé avec le FileStream seulement pour voir ce que ca me donnerais dans un fichier comme apercu avec un autre logiciel de Windows...
<hr />I love .net
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Yxion
Messages postés219Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 7 septembre 2009 2 oct. 2007 à 10:20
Non, ca ne marche pas du tout ce code : Le MemoryStream demande une conversion explicite, et même avec ca ne marche pas du tout. De plus, la conversion directe du Stream en Icone ne marche pas du tout non plus.
Ce qui marche, mais pas sur des sites comme codes-sources ou developpez.com et qui est bcp plus simple, c'est ca :
WebResponse webResponse = webRequest.GetResponse();
if (webResponse.ContentLength > 0) {
using (Stream stream = webResponse.GetResponseStream()) {
using (Bitmap bmp = new Bitmap(stream))
this._favIcon = Icon.FromHandle(bmp.GetHicon());
}
}
webResponse.Close();
La, ca marche avec Google ou Microsoft, mais pas ici. Ca ne marche plus si je ne passe pas par un Bitmap
cs_Yxion
Messages postés219Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 7 septembre 2009 2 oct. 2007 à 10:51
C'est une erreur de GDI... et sans try catch, il zappe le reste du code de la méthode, ca m'est arrivé d'autre fois avec GDI. Avec try catch, je recoit "Le paramètre n'est pas valide" ... c'est tout.
Interception de System.ArgumentException
Message="Le paramètre n'est pas valide."
Source="System.Drawing"
StackTrace:
à System.Drawing.Bitmap..ctor(Stream stream)
à ExtendWebBrowser.OnDocumentCompleted(WebBrowserDocumentCompletedEventArgs e) dans ...\ExtendWebBrowser.cs:ligne 79
Ca bloque au moment de la transformation du stream en image.
J'ai aussi essayé ca : Image img = Image.FromStream(stream)... meme chose, ca plante ici.
cs_Yxion
Messages postés219Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 7 septembre 2009 2 oct. 2007 à 11:03
Mais alors pourquoi quand j'enregistre dans un fichier l'icone puis que je retourne le cherche directement avec le constructeur de Icone ca marche.... le filestream fait quelque chose de spécial? c'est la que je comprends pas le problème.
cs_Yxion
Messages postés219Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 7 septembre 2009 2 oct. 2007 à 11:17
Mais le fait de le mettre dans un MemoryStream devrait résoudre cet éventuelle pb. Ca devrais faire la meme chose qu'avec un filestream...
{
Je sais que qu'il lève à 95% de fois une exception sur Lenght et Position.
Par un point d'arret, il m'est arrivé une fois de le voir CanRead = false.
Il est toujours CanSeek = false par compte.
} (meme la ou le code marche)
Mais une fois dans le MemoryStream, il readable, seekable, writable.... et pas vide biensur.
cs_Yxion
Messages postés219Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 7 septembre 2009 2 oct. 2007 à 12:04
Oui, j'ai déjà vu, mais à par passer par une gestion d'un proxy, certains de mes tests ressemblaient exactement à ca. Je suis déjà tombé sur cette source sans jamais la télécharger, et après test, le résultat est le même...
cs_Yxion
Messages postés219Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 7 septembre 2009 2 oct. 2007 à 12:23
Ben chez, ca marche chez MS, mais pas ici, comme pour mon code... Mais merci d'avoir pensé à ca, ca viens de m'éviter de tester le GetResponse assynchrone, qui apparement ne donnerait pas plus de résultat.