2010-04-24 4 views
0

Mon objectif est d'afficher la même icône deux fois, mais chaque fois dans une taille différente. J'ai essayé ce qui suit:Afficher la même icône en 2 tailles différentes sur C#

FileStream fs = new FileStream("name_of_the_icon_file.ico", FileMode.Open); 
Icon ico = new Icon(fs, 32, 32);  //create an in-memory instance of the icon, size 32x32 
Icon ico2 = new Icon(fs, 16, 16); //create an in-memory instance of the icon, size 16x16 
... 
Graphics.DrawIcon(ico, /*some point*/); 
Graphics.DrawIcon(ico2, /*some other point*/); 

La dernière ligne lève une ArgumentException: la valeur ne tombe pas dans la plage attendue. Quelqu'un peut-il m'expliquer ce qui ne va pas et quelle est la bonne façon de le faire?

Répondre

2

Un fichier d'icône contient une ou plusieurs images de tailles différentes.

Le constructeur d'icônes que vous utilisez essaie de trouver une correspondance exacte pour la taille que vous avez donnée dans le fichier d'icônes. Si le fichier d'icône ne contient pas d'image 16x16, il lèvera une exception car il ne peut pas correspondre à cette taille exacte. Au lieu de cela, il suffit de charger l'icône (sans spécifier de taille, de sorte que toutes les tailles soient chargées), puis d'utiliser la commande Graphics.DrawIcon (icône, rectangle) pour la dessiner à la taille souhaitée. Il utilisera la taille de correspondance la mieux définie dans l'icône (puis l'agrandira si nécessaire). Pour une meilleure qualité, modifiez votre fichier d'icônes (je suggère d'utiliser IcoFX) pour fournir des images spécifiques aux tailles souhaitées (32x32 et 16x16) afin que les icônes ne soient pas mises à l'échelle lorsque vous les dessinez.

+0

Merci pour la réponse, j'ai essayé votre suggestion, mais le code est sur .Net 3.5 Compact Framework (pour Windows Mobile ...) et cette méthode de substitution de DrawIcon n'existe pas là. Il n'y a que DrawIcon (icône d'icône, int x, int y). Une autre chose est, quand je compile mon code sans la deuxième ligne (avec une taille d'icône 32x32), il dessine l'icône plus petite (16x16) ok (sans exception ...), donc je ne pense pas que l'icône ne contient pas d'image 16x16. Peut-être avez-vous une autre idée sous ces nouvelles hypothèses? Merci encore. –

+0

Votre icône possède-t-elle * les deux formats * 16x16 et 32x32? –

+0

Oui, je viens de le vérifier en utilisant l'éditeur d'image fourni dans Visual Studio. –

Questions connexes