Accueil
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi Eclipse MS-Office SQL & SGBD Oracle  4D  Business Intelligence
logo



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


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

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com