GDI+ : aperçu d’une
fonctionnalité…
Document
1, avenue de l’Europe
Auteur David Catuhe
Email [Link]@[Link]
Campus 1 – Bâtiment F Web [Link]
Version 1.0
Nombre de pages 5
31400 Toulouse Date 11/02/2002
Tél. 05 61 75 13 13
Fax 05 61 75 47 97
Web [Link]
2/5
SQL Server 2000 – Episode 2 : XML
1, avenue de l’Europe, Campus 1 – Bâtiment F 31400 Toulouse Tél. 05 61 75 13 13 Fax 05 61 75 47 97
3/5
SQL Server 2000 – Episode 2 : XML
1 Introduction
Nous allons aujourd’hui nous pencher sur un des nombreux espaces de nommage
du framework .Net : le [Link].
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.
Le code source de cet outil est téléchargeable ici :
[Link]
2 ImgConverter
L’interface graphique se présente de la manière suivante :
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 :
[Link] : Permet l’accès aux fonctionnalités de base du GDI+.
1, avenue de l’Europe, Campus 1 – Bâtiment F 31400 Toulouse Tél. 05 61 75 13 13 Fax 05 61 75 47 97
4/5
SQL Server 2000 – Episode 2 : XML
[Link] : 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, [Link] e)
{
// On associe le format à la combobox
[Link]("BMP", [Link]);
[Link]("JPG", [Link]);
[Link]("GIF", [Link]);
[Link]("TIF", [Link]);
[Link]("PNG", [Link]);
// On ajoute les entrées dans la combo
[Link]("BMP");
[Link]("JPG");
[Link]("GIF");
[Link]("TIF");
[Link]("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, [Link] e)
{
// Ouverture d'une fenêtre de dialogue afin de choisir les fichiers
OpenFileDialog frm = new OpenFileDialog();
// Possibilité de multisélection
[Link] = true;
// Notre filtre
[Link] = "Fichiers Images(*.BMP;*.JPG;*.GIF;*.PNG;*.TIF)|
*.BMP;*.JPG;*.GIF;*.PNG;*.TIF|Tous (*.*)|*.*";
// Affichage
if ([Link]() == [Link])
{
// On remplit la liste
[Link]();
foreach (string fichier in [Link])
[Link](fichier);
}
}
1, avenue de l’Europe, Campus 1 – Bâtiment F 31400 Toulouse Tél. 05 61 75 13 13 Fax 05 61 75 47 97
5/5
SQL Server 2000 – Episode 2 : XML
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, [Link] e)
{
// On positionne la souris en attente
Cursor = [Link];
try
{
string format = [Link]();
foreach (string fichier in [Link])
{
string extension = [Link]([Link] - 3, 3);
if (extension != format)
{
// On crée le nouveau nom de fichier
string nouveauFichier = [Link](0,
[Link] - 3) + format;
// On crée une image GDI+
Image img = [Link](fichier);
// On sauvegarde selon le bon format
[Link](nouveauFichier,
(ImageFormat)formatConversion[format]);
}
}
// Tout s'est bien passé...
[Link]();
[Link]("Conversion réussie avec succés.");
}
catch
{
// En cas d'erreur, on affiche un message à l'utilisateur
[Link]("Erreur lors de la conversion");
}
Cursor = [Link];
}
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 [Link] 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.
1, avenue de l’Europe, Campus 1 – Bâtiment F 31400 Toulouse Tél. 05 61 75 13 13 Fax 05 61 75 47 97