2010-01-30 2 views
2

Je développe une application de base de données de document qui manipule des images de TIFF. Lorsque vous annotez des images, afin que l'interface utilisateur ne présente que des choix en noir et blanc pour les images bitonales (Format1bppIndexed) par rapport aux couleurs multiples pour les images avec une profondeur de couleur plus élevée, je dois tester si un TIFF est bitonal. Voici ma fonction:Test .NET pour l'image TIFF bitonale sans exception de trapping

private bool IsBitonal(string filePath) 
{ 
    bool isBitonal = false; 
    try 
    { 
     Bitmap bitmap = new Bitmap(sourceFilePath); 
     Graphics graphics = Graphics.FromImage(bitmap); 
    } 
    catch (Exception ex) 
    { 
     isBitonal = true; 
    } 
    return isBitonal; 
}

Cela fonctionne mais il n'est pas gracieux. L'exception de format de pixel indexée lancée est décrite ici: http://msdn.microsoft.com/en-us/library/system.drawing.graphics.fromimage.aspx.

Le recouvrement d'une exception pour un flux de programme normal est une mauvaise pratique. En outre, il est concevable qu'une exception différente puisse être levée. Existe-t-il une meilleure façon d'implémenter une fonction IsBitonal qui ne repose pas sur le piégeage d'une exception? J'ai essayé de rechercher sur le web des informations et j'ai trouvé des exemples de chargement d'une image TIFF et d'éviter l'exception en convertissant dans un format différent, mais je n'ai trouvé aucun exemple de test simple pour savoir si un fichier TIFF était ou non l'image est bitonale.

Merci. Pouvez-vous juste vérifier la propriété PixelFormat de votre bitmap?

Répondre

4

private bool IsBitonal(string sourceFilePath) 
{ 
    Bitmap bitmap = new Bitmap(sourceFilePath); 
    return (bitmap.PixelFormat == PixelFormat.Format1bppIndexed) 
} 

Si cela ne fonctionne pas, vous devriez être en mesure de regarder la collection PropertyItems dans la classe Bitmap et lire directement les balises TIFF de l'image.

Voir les spécifications TIFF ici: http://www.awaresystems.be/imaging/tiff/tifftags/baseline.html

Vous pourriez également regarder les dimensions et la résolution de l'image et le contraste avec la taille du fichier pour obtenir une idée de combien de bits par pixel il y a. (Cela ne serait probablement pas très précis étant donné la compression et les métadonnées dans l'image).

+0

Vérification de la propriété bitmap.PixelFormat. Merci pour l'info. – user262310

Questions connexes