FAQ C#Consultez toutes les FAQ
Nombre d'auteurs : 41, nombre de questions : 274, dernière mise à jour : 27 mai 2018 Ajouter une question
Cette FAQ a été réalisée pour répondre aux questions les plus fréquemment posées concernant C# sur le forum Développement DotNET
Je tiens à souligner qu'elle ne garantit en aucun cas que les informations qu'elle contient sont correctes ; les auteurs font le maximum, mais l'erreur est humaine. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci .
Sur ce, je vous souhaite une bonne lecture.
Commentez cette FAQ : Commentez
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.
Voici une méthode permettant de convertir une image en un tableau de bytes :
Code c# : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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; } } |
Voici une méthode permettant de convertir un tableau de bytes en image :
Code c# : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | public static Image ByteArray2Image(Byte[] BArray) { try { MemoryStream mstImage = new MemoryStream(BArray); Image img = Image.FromStream(mstImage); return img; } catch (Exception ex) { return null; } } |
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 deux PictureBox : PBWindow, PBScreen après le clic sur un Button BPrint.
Code c# : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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; } |
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 :
Code c# : | Sélectionner tout |
1 2 3 | 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)); |
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
Code c# : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | 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; } } } |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes 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 © 2024 Developpez 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'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.