Bewise

Nous développons... votre avance

GDI+ : aperçu d'une fonctionnalité

NIU
11/02/2002 - David Catuhe
Télécharger la version Word
Télécharger les sources

1 Introduction

Nous allons aujourd’hui nous pencher sur un des nombreux espaces de nommage du framework .Net : le System.Drawing.

Cet espace et ses sous-espaces ont pour rôle de fournir des classes puissantes et simples pour encapsuler le GDI+. Ce dernier n’est autre qu’une API riche pour dessiner et gérer tout ce qui a trait à l’image sous Windows.

Dans ce cadre, nous allons mettre en place un programme qui va nous permettre de convertir à la volée des fichiers d’un format graphique vers un autre.

2 ImgConverter

L’interface graphique se présente de la manière suivante :

clip_image001

Nous allons donc découper notre travail en trois étapes :

  1. Remplir la liste des formats de sortie
  2. Sélectionner les fichiers à convertir
  3. Mettre en place la conversion

Pour ce faire, nous allons utiliser les deux espaces de nommages suivants :

  • System.Drawing : Permet l’accès aux fonctionnalités de base du GDI+.
  • System.Drawing.Imaging : Permet l’accès aux classes de manipulation des images.

Pour notre exemple, nous allons prendre en compte 5 formats : le BMP, le JPEG, le TIFF, le GIF et le PNG. Ces formats sont directement gérés par le GDI+ via des décodeurs et des encodeurs présents sur le système. Dans le cadre d’un format non géré, nous pourrions mettre en œuvre nos propres codeurs et décodeurs via le concept d’héritage.

Le remplissage de la combo de format de sortie s’effectue ainsi :

private void Form1_Load(object sender, System.EventArgs e) { // On associe le format à la combobox formatConversion.Add("BMP", ImageFormat.Bmp); formatConversion.Add("JPG", ImageFormat.Jpeg); formatConversion.Add("GIF", ImageFormat.Gif); formatConversion.Add("TIF", ImageFormat.Tiff); formatConversion.Add("PNG", ImageFormat.Png); // On ajoute les entrées dans la combo cmbSortie.Items.Add("BMP"); cmbSortie.Items.Add("JPG"); cmbSortie.Items.Add("GIF"); cmbSortie.Items.Add("TIF"); cmbSortie.Items.Add("PNG"); }

La variable formatConversion est une table de hachage qui nous permettra de récupérer le bon encodeur selon la chaîne de caractères présente dans la combo. En effet, une table de hachage (Hashtable) permet d’associer une clé à un objet et donc une chaîne de caractères à un format de codage. Le format de codage est une propriété statique de la classe ImageFormat.

La sélection des fichiers à convertir va se faire via la classe OpenFileDialog qui nous donne accès à la boite de dialogue standard de sélection de fichier :

private void cmdChoisir_Click(object sender, System.EventArgs e) { // Ouverture d'une fenêtre de dialogue afin de choisir les fichiers OpenFileDialog frm = new OpenFileDialog(); // Possibilité de multisélection frm.Multiselect = true; // Notre filtre frm.Filter = "Fichiers Images(*.BMP;*.JPG;*.GIF;*.PNG;*.TIF)|*.BMP;*.JPG;*.GIF;*.PNG;*.TIF|Tous (*.*)|*.*"; // Affichage if (frm.ShowDialog() == DialogResult.OK) { // On remplit la liste lstListe.Items.Clear(); foreach (string fichier in frm.FileNames) lstListe.Items.Add(fichier); } }

Finalement, il ne nous reste plus qu’à parcourir la liste de nos fichiers et à faire appel à la classe Image. Cette dernière possède toutes les bonnes méthodes pour charger où sauvegarder des images.

private void cmdConvertir_Click(object sender, System.EventArgs e) { // On positionne la souris en attente Cursor = Cursors.WaitCursor; try { string format = cmbSortie.SelectedItem.ToString(); foreach (string fichier in lstListe.Items) { string extension = fichier.Substring(fichier.Length - 3, 3); if (extension != format) { // On crée le nouveau nom de fichier string nouveauFichier = fichier.Substring(0, fichier.Length - 3) + format; // On crée une image GDI+ Image img = Image.FromFile(fichier); // On sauvegarde selon le bon format img.Save(nouveauFichier, (ImageFormat)formatConversion[format]); } } // Tout s'est bien passé... lstListe.Items.Clear(); MessageBox.Show("Conversion réussie avec succés."); } catch { // En cas d'erreur, on affiche un message à l'utilisateur MessageBox.Show("Erreur lors de la conversion"); } Cursor = Cursors.Default; }

Encore une fois, le fonctionnement se trouve être on ne peut plus simple grâce à l’encapsulation faite par les classes de base du Framework .Net.

Il faut également souligner que le System.Drawing possède énormément de fonctionnalités en ce qui concerne le graphisme 2D et que nous n’avons ici fait qu’effleurer une partie microscopique.

> Tous les articles

Commentaires

aucun commentaire
Page 1/1
   
Connexion
  • Accueil
  • Plan du site
  • Contact
Bewise TV, Blog technique, Webcasts...

Votre carrière et nous

  • Nos offres
  • Votre candidature
Ignorer les liens de navigation > Accueil > Nos Métiers > Nouvelles Interfaces Utilisateurs > Détail Article
Ignorer les liens de navigation
Nous
Nos Métiers
Vous Former
Nos Evénements
Nos Références
Nos Activités
Nos Certifications
Nos Chiffres
Le Groupe
Nos Partenaires
On Parle de Nous
Votre Carrière et Nous
Nous Contacter
Défiler vers le haut
Défiler vers le bas
Administration, Système et Communication
Architecture, Méthodes, Industrialisation
Décisionnel et Gestion des Données
Nouvelles Interfaces Utilisateurs
Portail et Travail Collaboratif
Solutions Langages et Framework
Solutions Web Avancées
Défiler vers le haut
Défiler vers le bas
Nos cours
Le Planning
Offres promotionnelles
Défiler vers le haut
Défiler vers le bas
TechDays'12
TechLunch
Windows 8 Camp
Défiler vers le haut
Défiler vers le bas
  • Infos légales
  • Lettre du Regional Director
  • Revue de presse