2010-02-25 12 views
2

J'ai écrit une petite application de barre d'état système qui utilise un NotifyIcon pour afficher l'état d'un processus. Je suis le chargement d'une haute qualité 64 par 64 .png au format icon de la manière suivante:Icônes de la barre d'état système déformée

Bitmap rawImage = new Bitmap(Assembly.GetExecutingAssembly().GetManifestResourceStream("Snitch.Icons.Loading.png")); 
m_icon.Icon = Icon.FromHandle(rawImage.GetHicon()); 

Cependant, l'icône qui apparaît dans la barre d'état système ne semble jamais aussi bon que mon icône source, est-il un cadre ou quelque chose que je suis manquant? J'ai essayé les 16x16, 32x32 huit bits icône que les fichiers VS2008 crée, mais ils ne semblent pas mieux.

+0

J'ai entendu dire que le terme correct pour "barre d'état système" est "Zone de notification Windows". Juste nitpicking, cependant. – zneak

+0

Vous devriez probablement redimensionner votre icône en utilisant un logiciel de retouche d'image qui utilise un meilleur algorithme d'interpolation. Ou encore mieux utiliser une icône 16x16 spécialement conçue directement. –

+0

J'ai essayé un 16x16, ils semblent être étrangement déformés aussi. Je devrais mentionner que c'est VS2008 sur Windows 7 Enterprise. – Danielb

Répondre

1

Considérer la qualité d'une image miniature par rapport à une photographie en taille réelle; Imaginez maintenant rétrécir toute la photo jusqu'à 16x16 pixels. Plus l'écart entre la taille d'origine et la nouvelle taille est grand, plus le résultat sera mauvais, peu importe si vous rétrécissez ou étirez. La meilleure chose à faire, si vous le pouvez, est d'obtenir ou de créer un fichier .ico qui contient en fait des icônes séparées 16x16, 32x32, 48x48 et 64x64. La meilleure chose est probablement d'utiliser une icône 16x16 pour la zone de notification. Tout redimensionnement/rééchantillonnage d'image va avoir l'air déformé.

Il existe un certain nombre de sites sur le Web avec des téléchargements gratuits ou bon marché d'icônes de tailles multiples ou 16x16. Il y a déjà plusieurs questions ici sur where to find icons donc je ne vais pas essayer de commencer à lister les sites moi-même.

+0

J'ai déjà essayé les petites icônes (même si je les ai dessinées), elles semblaient encore avoir des artefacts étranges, par ex. un cercle coloré sur un fond transparent a en quelque sorte acquis un contour partiel noir. – Danielb

+0

@Danielb: Pour que je devrais voir un exemple, je ne peux pas dire que j'ai connu ce comportement particulier. – Aaronaught

2

Si vous ajoutez un contrôle NotifyIcon l'objet formulaire de votre application, puis votre application affichera une icône dans la zone de plateau de la barre des tâches. La taille de rendu de l'icône Notify est le même que pour la boîte de commande et icônes Taskbar: 16x16 pixels, potentiellement étirées pour accueillir la hauteur du plateau de système, qui dépend de la hauteur de la Taskbar. Curieusement, cependant, Windows n'utilise pas le bitmap 16x16x256 pour cette situation ; il utilise par défaut le bitmap 32x32x256 et l'écrase à la taille requise. Je peux penser d'aucune raison particulièrement bonne pour cette différence - en utilisant la version 32x32 pour l'icône de notification, mais 16x16 pour la barre des tâches et la boîte de contrôle - mais il il est.

http://www.hhhh.org/cloister/csharp/icons/

Remarque - l'article est de c. 2003

+0

J'utilise le réglage des petites icônes sur ma barre des tâches, donc je suppose que cela pourrait introduire une distorsion supplémentaire. – Danielb

1

Je vois également des icônes déformées dans ma barre d'état système, et j'ai tracé le problème pour régler le paramètre DPI. Dans mon cas, il est 115 au lieu de 100. Lorsqu'il est affiché dans la barre d'état système, une icône 16x16 est en fait affichée en 18x18. Le nombre provient de cette équation:

iconSize= (int) (16* (115/100))= int (18.4) = 18 

L'icône de 18x18 semble laid parce que Win prend une icône de 16x16 et « clones » quelques rangées de pixels et des colonnes pour correspondre à la nouvelle taille. J'ai essayé de fournir à Win une icône 18x18 personnalisée, mais Win ne l'affichera pas dans la barre d'état système. Il va d'abord forcer le bitmap d'icône à la taille de puissance-de-2 la plus proche (16x16), et puis l'étirer à 18x18 pour l'affichage par pixel-cloning (avec artefacts attendus). En dehors de changer votre DPI, je ne vois pas de solutions de contournement, car nous n'avons aucun contrôle sur l'étape intermédiaire forcée "power-of-2".

+0

Merci d'indiquer d'où vient le problème. –