2014-09-04 1 views
0

J'ai donc cette méthode pour définir des balises de métadonnées de base qui sera finalement ajouté à mon image:Réglage BitmapMetadata.Title en service en cours d'exécution sur Windows Server 2003 Web Edition jette NotSupportedException

 BitmapMetadata metaData = new BitmapMetadata("jpg"); 
     foreach (var t in tags) 
     { 
      try 
      { 
       switch (t.Key) 
       { 
        case "Author": 
         metaData.Author = new System.Collections.ObjectModel.ReadOnlyCollection<string>(new string[] { t.Value }); 
         break; 

        case "Rating": 
         int rating = 0; 
         if (int.TryParse(t.Value, out rating)) 
         { 
          metaData.Rating = rating; 
         } 
         break; 

        case "Subject": 
         metaData.Subject = t.Value; 
         break; 

        case "Title": 
         metaData.Title = t.Value; 
         break; 

        case "Comment": 
         metaData.Comment = t.Value; 
         break; 

        default: 
         keywords.Add(string.Format("{0}:{1}", t.Key, t.Value)); 
         break; 
       } 
      } 
      catch (Exception ex) 
      { 
       //Do some logging 
      } 
     } 

Et je continue à recevoir la erreur:

System.NotSupportedException: No imaging component suitable to complete this operation was found. ---> System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x88982F50 \ --- End of inner exception stack trace --- \ at System.Windows.Media.Imaging.BitmapMetadata.SetQuery(String query, Object value) \ at System.Windows.Media.Imaging.BitmapMetadata.set_Title(String value)

Exécution en tant qu'hôte local sur Windows 8.1 cela fonctionne très bien. Dès que je déploie mon service sur mon Windows Server 2003 Web Edition, il renvoie l'erreur indiquée. Qu'est-ce qui se passe?

+0

Peut-être qu'il vous manque un encodeur JPEG. Cela se trouve normalement dans System.Drawing.dll, dans l'espace de noms System.Drawing.Imaging. Essayez de faire "ImageCodecInfo [] encoderArray = ImageCodecInfo.GetImageEncoders();" et vérifie qu'il y a au moins un résultat dans le tableau retourné. – RenniePet

+0

J'ai couru cette méthode et imprimé le nom Codec et obtenu: intégré BMP Codec, intégré Codec GIF, intégré Codec TIFF, intégré Codec PNG, Je devine que je m manquant un encodeur jpg? Comment puis-je installer un encodeur jpg sur mon serveur Windows 2003? – user1

+0

Oui. Malheureusement, je n'ai aucune connaissance de cette situation spécifique. Vous pourriez peut-être essayer d'installer ceci: http://support.microsoft.com/kb/958911 (Mais si cela provoque des problèmes, s'il vous plaît ne me blâme pas. :-) – RenniePet

Répondre

2

Le correctif à c'était d'utiliser explicitement le SetQuery pour les métadonnées ... Par exemple:

BitmapMetadata jpgData = new BitmapMetadata("jpg"); 
jpgData.SetQuery("/app13/irb/8bimiptc/iptc/object name", "Test Title"); 
jpgData.SetQuery("/app13/irb/8bimiptc/iptc/keywords", "Test Tag"); 
jpgData.SetQuery("/app13/irb/8bimiptc/iptc/date created", "20090512"); 
jpgData.SetQuery("/app13/irb/8bimiptc/iptc/time created", "115300-0800"); 
jpgData.SetQuery("/app13/irb/8bimiptc/iptc/caption", "Test Comment"); 
jpgData.SetQuery("/app13/irb/8bimiptc/iptc/by-line", "Test Author"); 
jpgData.SetQuery("/app13/irb/8bimiptc/iptc/copyright notice", "Copyright 2009"); 

D'un commentaire sur this link

En effet, le WIC utilisé dans Windows Server 2003 n'est pas identique à Windows 7/8 et ne peut pas être mis à jour. et ainsi metadata.Title etc. throw notfoundexception

Questions connexes