WPF : réalisation d'un outil de conversion de fichiers image avec PerspectiveWPF : réalisation d'un outil de conversion de fichiers image avec Perspective
WPF et Windows Imaging Component (WIC)
WPF fournit des services évolués de manipulation d'image que je décris dans mon livre .
Ces services sont basés sur l'API native Windows Imaging Component (WIC). Les codecs WIC des formats standard de fichier image (BMP, JPEG, GIF, PNG, HD Photo, etc.) sont installés par défaut sous Windows Vista, et sont installés sous Windows XP avec le framework .NET 3.x. Pour les formats plus exotiques, tels que les formats RAW des appareils photos numériques, les constructeurs fournissent les codecs WIC à installer. Exemples :
Grâce à WIC, WPF fournit une couche d'abstraction qui permet de manipuler les images avec les mêmes routines quelque soit leur format d'origine ou de destination.
A partir de sa version 1.0, La bibliothèque Perspective propose des classes de haut-niveau (BitmapToJpegConverter, BitmapToPngConverter et BitmapConverter) qui encapsulent ces API pour permettre la conversion des fichiers image d'un dossier source en fichiers d'un autre format créés dans un dossier cible.
ImageToJpeg
J'ai ainsi réalisé une application console (ImageToJpeg.exe) en vue de convertir les fichiers RAW de mon reflex Nikon en fichier JPEG. Les fichiers RAW contiennent les données brutes délivrées par le capteur. Ils constituent ainsi les clichés originaux, et ont la même valeur que les négatifs en photo argentique. Grâce à cet outil, je les convertis en fichier JPEG en spécifiant un taux de compression plus ou moins élevé en fonction de l'utilisation recherchée. La syntaxe est la suivante :
ImageToJpeg.exe dossierOriginal dossierConverti [qualité] [ow:0/1] [recurs:0/1]
- dossierOriginal : chemin du dossier contenant les fichiers originaux
- dossierConverti : chemin du dossier contenant les fichiers convertis (dossier créé si inexistant)
- qualité : niveau de qualité JPEG (1 à 100 - 75 par défaut)
- ow:1 écrase les fichiers convertis existants (valeur par défaut ow:0) - Attention à cette option si vos fichiers originaux sont des fichiers JPEG !
- recurs:1 : traite les sous-répertoires récursivement (valeur par défaut recurs:0)
Exemple : ImageToJpeg.exe Photos\RAW Photos\JPEG 80 ow:1 recurs:1
Cet outil n'est pas dédié aux fichiers RAW. Il peut être utilisé pour convertir en JPEG des fichiers de n'importe quel format dans la mesure ou le codec est installé.
L'exécutable et ses sources peuvent être téléchargés ici .
Le code source
Le code de cette application exploite simplement la méthode ConvertFiles de la classe BitmapToJpegConverter de Perspective en lui passant les arguments de la ligne de commande. Petite subtilité : la méthode Main de l'application console doit être décorée avec l'attribut STAThread, afin que le modèle de thread soit compatible avec WPF.
using System;
using Perspective.Core.Wpf.Imaging;
using System.Threading;
namespace ImageToJpeg
{
class Program
{
[STAThread]
static void Main(string[] args)
{
//...
// Récupération des arguments de la ligne de commande
//...
BitmapToJpegConverter btjc = new BitmapToJpegConverter();
btjc.QualityLevel = quality;
btjc.Encoding += (sender, e) =>
{
Console.Write("{0}", e.OriginalFilename);
};
btjc.Encoded += (sender, e) =>
{
Console.WriteLine(" => {0} ", e.ConvertedFilename);
};
btjc.ConvertFiles(originalPath, convertedPath, recursive, overwrite);
Console.WriteLine("Conversion terminée.");
return;
}
}
}La classe BitmapToPngConverter de Perspective peut être utilisée selon le même principe pour produire des fichiers PNG en sortie. La classe BitmapConverter, de plus bas niveau, permet de produire d'autres formats en utilisant l'encodeur WPF adéquat.
A propos de cet article
Auteur : Olivier Dewit.
Historique :
- 7 septembre 2008 : 1ère publication (Perspective version 1.0).