2009-05-18 5 views
1

Je reçois l'exception suivante lors de l'appel de BitmapMetadata.GetQuery ("/ app13/irb/8bimiptc/iptc") sur environ 1% des fichiers JPEG sur lesquels j'ai essayé. Qu'est-ce qui pourrait causer cela et que puis-je faire pour le réparer? (Je l'ai essayé googler, mais je ne peux trouver un résultat pertinent poser la même question, mais sans réponse.)Erreur lors de la lecture des champs IPTC à partir de fichiers JPEG dans .NET

System.OverflowException: 
The image data generated an overflow during processing. ---> 
System.Runtime.InteropServices.COMException (0x88982F05): 
Exception from HRESULT: 0x88982F05 
--- End of inner exception stack trace --- 
at System.Windows.Media.Imaging.BitmapMetadata.GetQuery(String query) 
at MyProject.ImageRecord..ctor(String file) 
in C:\MyProject\ImageRecord.cs:line 93 
The image data generated an overflow during processing. 

Edit:

Les rapports d'outils exiv2:

Error: Invalid Photoshop IRB data size 6372 
+0

Pouvez-vous poster un fichier JPEG qui a ce problème pour que je puisse k dedans? –

+0

Malheureusement, je ne peux pas poster un exemple car certaines données IPTC sont protégées par des droits d'auteur, et si je les édite, l'exception ne se reproduira pas. – Liam

Répondre

1

Je pense est que les données IRB Photoshop est plus long que l'en-tête spécifie.

Au moins ce que je peux déduire par écrémage sur la source de Exiv2 (ligne 107):

http://dev.exiv2.org/repositories/entry/exiv2/trunk/src/jpgimage.cpp?rev=1146

Mais ma compréhension de c est pas bon! :)

+0

Merci, je me demande s'il existe des outils pour corriger de telles erreurs dans les en-têtes? – Liam

+0

Je suis encore tombé sur cette erreur, Googled, et trouvé ma vieille question ici. Cette fois-ci, j'ai ajouté un bloc try..catch, enregistré les noms des fichiers de problèmes, et les ai corrigés en les ouvrant dans XnView, et en sélectionnant Edition> Métadonnées> Editer les données IPTC> Écrire. – Liam

+0

Des suggestions pour faire cela pour un grand nombre d'images? – Liam

1

Erreur 0x88982F05 est seulement une erreur de valeur hors plage régulière par WIC Ainsi, il peut être facilement géré par vous. En outre, cela pourrait ne pas être votre seul problème avec les chaînes de requête IPTC. Il suffit de try {} catch {} cette section comme celui-ci à fallover gracieuse

if (bitmapMetadata.GetQuery(MY_QUERY) != null &&) { 
try { 
... } 
catch {} 
0

D'après les informations communiquées par exiv2, la taille de l'information CISR Photoshop est incompatible avec la taille globale des métadonnées.

Si vous souhaitez ignorer les messages je serais plus précis dans le type d'exception que vous attrapez - seulement ignorer ou signaler cette exception COM particulier.

quelques outils/ressources là:

Questions connexes