none
Icon de bytes vers un fichier ico ? RRS feed

  • Question

  • Bonjour a tous

    J'ai transformé une icone sous forme de tableau de bytes et j'aimerais faire l'inverse c'est a dire depuis mon tableau de bytes en faire un fichier ico

    Pour l'instant je n'ai pas trouvé grand chose ... avez vous une idée ?

    En vous remerciant d'avance,

    Cordialement,


    Cordialement,

    mardi 10 novembre 2015 09:19

Réponses

  • Bonjour,

    Je suppose que voulez savoir pour une application Win Form.

    Vous pouvez dans un premier temps créer une image Bitmap à partir de votre tableau. La classe Bitmap possède la méthode intéressante GetHicon()

    Pour créer une image Bitmap la méthode classique consiste à créer un objet Bitmap d'une certaine taille 64x64 par exemple et de le remplir

    private Bitmap CreateBitmap()
            {
                System.Drawing.Bitmap b = new Bitmap(64, 64, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                for (int x = 0; x < 64; x++)
                    for (int y = 0; y < 64; y++)
                        b.SetPixel(x, y, Color.FromArgb(0, 0, 255)); //blue;
                for (int x = 0; x < 64; x++)
                    b.SetPixel(x, x, Color.Red);
                return b;
            }

    Vous pouvez aisément transférer un tableau de couleurs vers l'image Bitmap en vous servant de l'instruction b.SetPixel(x, y, Color.FromArgb(rouge, vert, bleu));

     

    Une autre possibilité est d'utiliser Marshal.Copy

    (http://www.tek-tips.com/viewthread.cfm?qid=1264492)

    private Bitmap CreateBitmapData()
            {
                int height = 64;
                int width = 64;
                byte[] d = new byte[height * width * 3];
                for (int x = 0; x < width; x++)
                    for (int y = 0; y < height; y++)
                    {
                        d[(x * 64 + y) * 3] = 240;
                        d[(x * 64 + y) * 3 + 1] = 0;
                        d[(x * 64 + y) * 3 + 2] = 0;
                    }
                Bitmap bmp = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
                System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(
                                     new Rectangle(0, 0, bmp.Width, bmp.Height),
                                     System.Drawing.Imaging.ImageLockMode.WriteOnly, bmp.PixelFormat);
                System.Runtime.InteropServices.Marshal.Copy(d, 0, bmpData.Scan0, d.Length);
                bmp.UnlockBits(bmpData);
                return bmp;
            }


    Ici on remplit un tableau de couleurs (rouge, vert, bleu, rouge, vert, bleu, …)

    Et on transfert son contenu dans l'image bmp

     

    Pour créer l'image ico, vous pouvez vous inspirer du code suivant trouvé à l'adresse:

    http://stackoverflow.com/questions/8174393/convert-bitmap-to-icon

    Il suffit d'adapter un peu.

    Vous pouvez aussi vous inspirer de

    http://stackoverflow.com/questions/14157134/creating-a-high-quality-ico-file-programatically

     

    mercredi 11 novembre 2015 12:03

Toutes les réponses

  • Bonjour, Troxsa,

    J’espère que cet exemple vous sera utile:
    C#.NET: Convert Icon to byte[] and back again

    Merci de nous tenir au courant.

    Cordialement,
    Dimitar

    mercredi 11 novembre 2015 09:13
    Modérateur
  • Bonjour,

    Je suppose que voulez savoir pour une application Win Form.

    Vous pouvez dans un premier temps créer une image Bitmap à partir de votre tableau. La classe Bitmap possède la méthode intéressante GetHicon()

    Pour créer une image Bitmap la méthode classique consiste à créer un objet Bitmap d'une certaine taille 64x64 par exemple et de le remplir

    private Bitmap CreateBitmap()
            {
                System.Drawing.Bitmap b = new Bitmap(64, 64, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                for (int x = 0; x < 64; x++)
                    for (int y = 0; y < 64; y++)
                        b.SetPixel(x, y, Color.FromArgb(0, 0, 255)); //blue;
                for (int x = 0; x < 64; x++)
                    b.SetPixel(x, x, Color.Red);
                return b;
            }

    Vous pouvez aisément transférer un tableau de couleurs vers l'image Bitmap en vous servant de l'instruction b.SetPixel(x, y, Color.FromArgb(rouge, vert, bleu));

     

    Une autre possibilité est d'utiliser Marshal.Copy

    (http://www.tek-tips.com/viewthread.cfm?qid=1264492)

    private Bitmap CreateBitmapData()
            {
                int height = 64;
                int width = 64;
                byte[] d = new byte[height * width * 3];
                for (int x = 0; x < width; x++)
                    for (int y = 0; y < height; y++)
                    {
                        d[(x * 64 + y) * 3] = 240;
                        d[(x * 64 + y) * 3 + 1] = 0;
                        d[(x * 64 + y) * 3 + 2] = 0;
                    }
                Bitmap bmp = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
                System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(
                                     new Rectangle(0, 0, bmp.Width, bmp.Height),
                                     System.Drawing.Imaging.ImageLockMode.WriteOnly, bmp.PixelFormat);
                System.Runtime.InteropServices.Marshal.Copy(d, 0, bmpData.Scan0, d.Length);
                bmp.UnlockBits(bmpData);
                return bmp;
            }


    Ici on remplit un tableau de couleurs (rouge, vert, bleu, rouge, vert, bleu, …)

    Et on transfert son contenu dans l'image bmp

     

    Pour créer l'image ico, vous pouvez vous inspirer du code suivant trouvé à l'adresse:

    http://stackoverflow.com/questions/8174393/convert-bitmap-to-icon

    Il suffit d'adapter un peu.

    Vous pouvez aussi vous inspirer de

    http://stackoverflow.com/questions/14157134/creating-a-high-quality-ico-file-programatically

     

    mercredi 11 novembre 2015 12:03