IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > WinForms > GDI+
        Qu'est-ce que le GDI+ ?
        Comment convertir une image en tableau de bytes ?
        Comment convertir un tableau de bytes en image ?
        Comment implémenter un PrintScreen rapidement ?
        Comment connaître la longueur en pixels d'une chaine de caractères ?
         Comment définir une région correspondant à une image ?



Qu'est-ce que le GDI+ ?
auteur : cardi
Cette définition est tirée de MSDN.

Le Common Language Runtime recourt à une implémentation avancée de l'interface graphique (GDI, Graphics Design Interface) Windows, appelée GDI+. GDI+ vous permet de créer des graphiques, de dessiner du texte et de manipuler des images graphiques en tant qu'objets. Cette interface est conçue pour allier performances et simplicité d'utilisation. Vous pouvez l'utiliser en vue du rendu des images graphiques sur des Windows Forms et des contrôles. GDI+ a entièrement remplacé GDI et constitue aujourd'hui la seule option disponible pour le rendu des graphiques par programme dans les applications Windows Forms.

lien : fr Graphiques GDI+ (MSDN)

Comment convertir une image en tableau de bytes ?
auteur : sam_XIII
Voici une méthode permettant de convertir une image en un tableau de bytes :

          
		public static Byte[] Image2ByteArray(Image img)
        {
            try
            {
                MemoryStream mstImage = new MemoryStream();
                img.Save(mstImage, System.Drawing.Imaging.ImageFormat.Jpeg);
                Byte[] bytImage = mstImage.GetBuffer();
                return bytImage;
            }
            catch (Exception ex)
            {
                return null;
            }
        }


        

Comment convertir un tableau de bytes en image ?
auteur : sam_XIII
Voici une méthode permettant de convertir un tableau de bytes en image :

          
        public static Image ByteArray2Image(Byte[] BArray)
        {
            try
            {
                MemoryStream mstImage = new MemoryStream(BArray);
                Image img = Image.FromStream(mstImage);
                return img;
            }
            catch (Exception ex)
            { return null; }
        }

        

Comment implémenter un PrintScreen rapidement ?
auteur : HULK
Ce code permet de réaliser simplement une capture d'écran de la fenêtre active et de l'écran en entier. Le principe est de simuler l'appui sur la touche "Impr écran" puis de récupérer l'image obtenue dans le Presse-Papier. Pour l'exemple donné ci-dessous, les résultats sont affichés dans 2 PictureBox : PBWindow, PBScreen après le clic sur un Button BPrint.

          
        private void BPrintClick(object sender, System.EventArgs e)
        {
            Bitmap screen;
            Bitmap window;

            // simuler l'appui de la touche PrintScreen
            SendKeys.SendWait("{PRTSC}");
            // récupérer l'image obtenue dans le Presse-Papier
            window = ((Bitmap)(Clipboard.GetDataObject().GetData("Bitmap")));
            // attribuer l'image à PBWindow
            PBWindow.Image = window;

            // simuler le PrintScreen enrichi
            SendKeys.SendWait("+{PRTSC}");
            // récupérer l'image obtenue dans le Presse-Papier
            screen = ((Bitmap)(Clipboard.GetDataObject().GetData("Bitmap")));
            // attribuer l'image à PBScreen
            PBScreen.Image = screen;
        }

        

Comment connaître la longueur en pixels d'une chaine de caractères ?
auteur : cardi
La classe Graphics possède une méthode MeasureString permettant de connaître la taille exacte d'une chaine de caractères en fonction de la Font utilisée :

          
System.Drawing.Graphics g = textBox1.CreateGraphics();
System.Drawing.SizeF objSizeF = g.MeasureString(textBox1.Text, textBox1.Font);
System.Windows.Forms.MessageBox.Show(string.Format("Votre texte '{0}' a une longueur de {1} pixeles.", textBox1.Text, objSizeF.Width));
        
lien : fr System.Graphics.MeasureString (MSDN)

Comment définir une région correspondant à une image ?
auteur : theMonz31

Voilà une petite classe pour faire cela...

L'idée (simple) est de pouvoir fournir une Region associée à une image.

L'intérêt est de pouvoir ensuite avoir des forms, ou des contrôles qui auront
pour zone de sélection l'image.

Voici le code

          
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;

namespace RegionBuilder
{
    public static class Tools
    {
        public static Region NewRegionForm(Color cTrans, string filename, Rectangle clientRec)
        {
            if (File.Exists(filename))
            {
                Bitmap bmp = new Bitmap(filename);
                return NewRegionForm(cTrans,bmp,clientRec);
            }
            return new Region(clientRec);
        }

        public static Region NewRegionForm(Color cTrans, Bitmap b, Rectangle clientRec)
        {
            int ct = cTrans.ToArgb();
            Rectangle r = new Rectangle(0, 0, 1, 1);
            GraphicsPath gpRemoved = new GraphicsPath(FillMode.Winding);
            BitmapData bd = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            int h = b.Height;
            int w = b.Width;
            int[,] mat = new int[h, w];
            int curj = 0;
            int nb = 0;
            bool canAdd = false;
            unsafe
            {
                int* pi = (int*)bd.Scan0.ToInt32() - 1;
                for (int i = 0; i < h; i += 1)
                {
                    for (int j = 0; j < w; j += 1)
                    {
                        pi++;

                        if (*pi == ct)
                        {
                            r.X = j;
                            r.Y = i;
                            mat[i, j] = 1;
                            if (canAdd)
                            {
                                mat[i, j] = 0;
                                nb++;
                            }
                            else
                            {
                                mat[i, curj] = nb;
                                curj = j;
                                canAdd = true;
                                nb = 1;
                            }
                        }
                        else
                        {
                            mat[i, j] = -1;
                            if (canAdd)
                            {
                                canAdd = false;
                                mat[i, curj] = nb;
                                nb = 0;
                            }
                            curj = j;
                        }
                    }
                    if (canAdd)
                    {
                        canAdd = false;
                        mat[i, curj] = nb;
                        nb = 0;
                        curj = 0;
                    }
                }
            }

            for (int i = 0; i < h; i += 1)
            {
                for (int j = 0; j < w; j += 1)
                {
                    if (mat[i, j] > 1)
                    {
                        r.Width = mat[i, j];
                        r.X = j;
                        r.Y = i;
                        j += (mat[i, j] - 1);
                        gpRemoved.AddRectangle(r);
                    }
                    else if (mat[i, j] == 1)
                    {

                        r.Width = 1;
                        r.X = j;
                        r.Y = i;
                        gpRemoved.AddRectangle(r);
                    }
                }
            }

            b.UnlockBits(bd);
            Region a = null;
            a = new Region(clientRec);
            a.Exclude(gpRemoved);
            gpRemoved.Dispose();
            return a;
        }
    }
}

        


Consultez les autres F.A.Q's


Valid XHTML 1.0 TransitionalValid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2010 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.