Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Arnaud Auroux


Silverlight, let there be light...
[VirtualEarth] Image au format de pixel indexé et GDI+

Fin septembre 2008 est apparue la première version du web service VirtualEarth. Ce dernier fournit différents types de services dont le service d'imagerie. Le service d'imagerie permet de récupérer des informations par rapport aux images utilisées dans le contrôle AJAX VirtualEarth comme par exemple l'url des images. Il est également possible de demander au service de positionner des punaises sur une image avant que ce dernier nous renvoie cette même image. Cette fonctionnalité est intéressante et il n'est malheuresement pas encore possible de demander au service de nous positionner d'autres types d'élements graphiques, je pense notamment à des cercles, des polygones, etc. Pour ce faire, il faut donc nous même dessiner sur l'image les éléments souhaités en utilisant GDI+ et sa fameuse classe Graphics. En effet cette dernière possède une méthode statique FromImage prenant en paramètre un objet de type Image et retournant un objet de type Graphics permettant de tracer différents types d'éléments sur l'image.

Si on consulte la page msdn de la méthode FromImage (http://msdn.microsoft.com/en-us/library/system.drawing.graphics.fromimage.aspx) on s'aperçoit que cette dernière ne supporte par les images au format de pixel indexé, i.e. les images où les couleurs sont gérées via une tablette de couleurs indexée, ainsi que quelques autres types d'image. Or il m'est arrivé plusieurs fois lors du développement d'une application utilisant le service d'imagerie VirtualEarth de récupérer une image ayant un format non pris en charge par cette méthode et de tomber face à l'exception : "A Graphics object cannot be created from an image that has an indexed pixel format". Dans cette situation, la seule solution consiste a créer une nouvelle image avec un format pris en charge par la méthode FromImage et de copier l'ancienne image dans cette nouvelle image. Voici la méthode que j'ai utilisé :

   1: private Image CheckImagePixelFormat(Image image)
   2: {
   3:      if (image.PixelFormat == PixelFormat.Format1bppIndexed ||
   4:          image.PixelFormat == PixelFormat.Format4bppIndexed ||
   5:          image.PixelFormat == PixelFormat.Format8bppIndexed ||
   6:          image.PixelFormat == PixelFormat.DontCare ||
   7:          image.PixelFormat == PixelFormat.Undefined ||
   8:          image.PixelFormat == PixelFormat.Format16bppArgb1555 ||
   9:          image.PixelFormat == PixelFormat.Format16bppGrayScale)
  10:      {
  11:          Bitmap correcter = new Bitmap(image.Width, image.Height);
  12:          Graphics g = Graphics.FromImage(correcter);
  13:          g.DrawImage(image, 0, 0);
  14:          g.Dispose();
  15:          return correcter;
  16:      }
  17:  
  18:      return image;
  19: }

Could help... ;)

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: lundi 5 janvier 2009 15:23 par Arnaud Auroux
Classé sous :

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Intégration Yammer et SharePoint Online (Office 365), étape 1 … par Le blog de Patrick [MVP SharePoint] le 06-12-2013, 17:37

- [Dynamics CRM] Ajouter les dossiers de CRM au dossier Favoris d’Outlook par Christine Dubois le 06-10-2013, 15:50

- Visual Studio 2013 par Etienne Margraff le 06-04-2013, 10:26

- Configurer la collation SQL Server pour SharePoint par Blog de Jérémy Jeanson le 06-03-2013, 19:48

- Etendre le Team Web Access de TFS 2012 – Step 1: Création du plugin par Philippe Didiergeorges Aka Philess le 06-03-2013, 07:30

- Livre Blanc : Développer des applications NUI par Fathi Bellahcene le 06-01-2013, 11:35

- [Dynamics CRM 2011] Copier une vue d'entité par Christine Dubois le 05-29-2013, 13:20

- [Conf’SharePoint 2013] Mes présentations… par Le blog de Patrick [MVP SharePoint] le 05-28-2013, 09:04

- [wpdev] Storage bug in MediaLibrary.SavePicture par Kévin Gosse le 05-26-2013, 19:08

- VMMap en mode instrumentation sur système 64bit : attention à la plateforme cible du build .NET par CoqBlog le 05-25-2013, 22:25