2010-02-01 3 views

Répondre

7

Un .ico peut avoir plusieurs images, mais lorsque vous chargez un fichier .ico et créer un objet d'icônes, une seule de ces images est chargée. Windows choisit l'image la plus appropriée en fonction du mode d'affichage et des paramètres système actuels et utilise celle-ci pour initialiser l'objet System.Drawing.Icon, en ignorant les autres.

Donc, vous ne pouvez pas créer un System.Drawing.Icon avec plusieurs images, vous devez en choisir un avant de créer l'objet Icon.

Bien sûr, il est possible de créer une icône à l'exécution à partir d'un bitmap, c'est ce que vous demandez vraiment? Ou demandez-vous comment créer un fichier .ico?

+1

Mais si je charge un fichier .ico comme je l'ai indiqué plus haut, je peux accéder au 16x16, 32x32, 48x48, etc. comme ceci -: Icône smallIcon = nouvelle icône (myIcon, 16, 16); – Damien

+2

Parce qu'il sait de quel fichier/ressource l'icône a été créée et peut y revenir et obtenir une nouvelle image. Cependant, il n'y a aucun moyen d'ajouter une image à un objet Icon. –

+0

@JohnKnoeller En fait, ce n'est pas vraiment vrai. Toutes les données d'image sont chargées par la classe 'Icon' en mémoire et lorsque vous redimensionnez à partir d'un autre objet' Icon', les données d'image sont partagées et la taille la plus proche est tirée des données originales (partagées). – NetMage

0

Il y a un bon code snippet here. Il utilise la méthode Icon.FromHandle.

À partir du lien:

/// <summary> 
/// Converts an image into an icon. 
/// </summary> 
/// <param name="img">The image that shall become an icon</param> 
/// <param name="size">The width and height of the icon. Standard 
/// sizes are 16x16, 32x32, 48x48, 64x64.</param> 
/// <param name="keepAspectRatio">Whether the image should be squashed into a 
/// square or whether whitespace should be put around it.</param> 
/// <returns>An icon!!</returns> 
private Icon MakeIcon(Image img, int size, bool keepAspectRatio) { 
    Bitmap square = new Bitmap(size, size); // create new bitmap 
    Graphics g = Graphics.FromImage(square); // allow drawing to it 

    int x, y, w, h; // dimensions for new image 

    if(!keepAspectRatio || img.Height == img.Width) { 
    // just fill the square 
    x = y = 0; // set x and y to 0 
    w = h = size; // set width and height to size 
    } else { 
    // work out the aspect ratio 
    float r = (float)img.Width/(float)img.Height; 

    // set dimensions accordingly to fit inside size^2 square 
    if(r > 1) { // w is bigger, so divide h by r 
     w = size; 
     h = (int)((float)size/r); 
     x = 0; y = (size - h)/2; // center the image 
    } else { // h is bigger, so multiply w by r 
     w = (int)((float)size * r); 
     h = size; 
     y = 0; x = (size - w)/2; // center the image 
    } 
    } 

    // make the image shrink nicely by using HighQualityBicubic mode 
    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
    g.DrawImage(img, x, y, w, h); // draw image with specified dimensions 
    g.Flush(); // make sure all drawing operations complete before we get the icon 

    // following line would work directly on any image, but then 
    // it wouldn't look as nice. 
    return Icon.FromHandle(square.GetHicon()); 
} 
+3

Je pense qu'il veut créer une icône avec plusieurs images ... –

0

Vous pouvez essayer d'utiliser png2ico pour créer un fichier .ico, en l'appelant à l'aide de System.Diagnostics.Process.Start. Vous devez créer vos images et les enregistrer sur le disque avant d'appeler png2ico.

Questions connexes