Configuration
Avant de commencer assuré vous que vous disposer de visual studio2010 et la dernier version du SDK de silverlight installer sur votre machine.
créer une nouvelle application silverlight et laisser coché "Héberger l'application Silverlight sur un nouveau site web".
changer les propriétés du projet silverlight pour qu'il puisse être exécuté hors navigateur.
finalement et puisque nous allons utilisé le mot clé dynamic ,vous devez référencé la bibliothèque CSharp.dll disponible dans le SDK de silverlight4
mise en oeuvre
dans cette partie nous allons créé une classe nommé ScannerService qui s’en chargera de scanner les images.
concernant les informations fourni par WIA ,je pense qu'il sera très intéressant de créer des énumérations a la place de travailler avec des valeurs numériques.
class ScannerService { // http://msdn.microsoft.com/en-us/library/ms630792(v=VS.85).aspx private enum WiaDeviceType { UnspecifiedDeviceType = 0, ScannerDeviceType = 1, CameraDeviceType = 2, VideoDeviceType = 3 } // http://msdn.microsoft.com/en-us/library/ms630798(v=VS.85).aspx private enum WiaImageIntent { UnspecifiedIntent = 0, ColorIntent = 1, GrayscaleIntent = 2, TextIntent = 4 } // http://msdn.microsoft.com/en-us/library/ms630796(v=VS.85).aspx private enum WiaImageBias { MinimizeSize = 65536, MaximizeQuality = 131072 } // http://msdn.microsoft.com/en-us/library/ms630810(v=VS.85).aspx
private class FormatID { public const string wiaFormatBMP = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}"; public const string wiaFormatPNG = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}"; public const string wiaFormatGIF = "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}"; public const string wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"; public const string wiaFormatTIFF = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}"; } // les autres méthodes }
pour pouvoir scanner une image on devra utiliser WIA.CommonDialog et de spécifier un ensemble de paramètres :
public BitmapSource Scan(String Chemin)
{
try
{ //création d'un objet WIA.CommonDialog
dynamic wiaDialog = AutomationFactory.CreateObject("WIA.CommonDialog");
//afficher la boite de dialog qui permet de scanner une image
dynamic imageFile = wiaDialog.ShowAcquireImage(
(int)WiaDeviceType.ScannerDeviceType,
(int)WiaImageIntent.TextIntent,
(int)WiaImageBias.MaximizeQuality,
FormatID.wiaFormatJPEG, true, true, false);
//forcer le type d'image ,s'il n'est pas jpeg on la convertie
if (imageFile.FormatID != FormatID.wiaFormatJPEG)
{
dynamic IP = AutomationFactory.CreateObject("Wia.ImageProcess");
IP.Filters.Add(IP.FilterInfos("Convert").FilterID);
IP.Filters(1).Properties("FormatID").Value = FormatID.wiaFormatJPEG;
imageFile = IP.Apply(imageFile);
}
//// sauvegarder l'image
imageFile.SaveFile(chemin);
}
catch (COMException ex)
{
if (ex.ErrorCode == -2145320939)
{
MessageBox.Show("!Scanner");
}
}
}
Si on veut manipuler l'image sans la sauvegarder sur disque :il suffit d'ajouter cette fonction et de la mettre a la place de imageFile.SaveFile(chemin);:
private BitmapSource ImageFileToBitmap(dynamic imageFile) { if (imageFile == null) return null; BitmapImage bitmapBase = new BitmapImage(); dynamic fileData = imageFile.FileData; _imageData = fileData.BinaryData; MemoryStream ms = new MemoryStream(_imageData); bitmapBase.SetSource(ms); WriteableBitmap writeableBitmap = new WriteableBitmap(bitmapBase); return writeableBitmap; }