Тест .NET для битового изображения TIFF без исключения перехвата? - PullRequest
2 голосов
/ 30 января 2010

Я разрабатываю приложение базы данных документов, которое обрабатывает изображения TIFF. При аннотировании изображений для того, чтобы пользовательский интерфейс отображал только черно-белое изображение в качестве вариантов для битовых (Format1bppIndexed) изображений по сравнению с несколькими цветами для изображений с более высокой глубиной цвета, мне нужно проверить, является ли TIFF битональным. Вот моя функция:

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;
}

Это работает, но это не изящно. Возникающее исключение формата индексированного пикселя описано здесь: http://msdn.microsoft.com/en-us/library/system.drawing.graphics.fromimage.aspx.

Захват исключения для нормального выполнения программы - плохая практика. Также возможно, что может быть выдано другое исключение. Есть ли лучший способ реализовать функцию IsBitonal, которая не полагается на перехват исключения?

Я попытался найти информацию в Интернете и нашел примеры того, как загрузить изображение TIFF и избежать исключения путем преобразования в другой формат, но я не смог найти примеров простого теста на наличие изображения TIFF или нет. является битональным

Спасибо.

1 Ответ

4 голосов
/ 30 января 2010

Можете ли вы просто проверить свойство PixelFormat своего растрового изображения?

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

Если это не сработает, вы сможете просмотреть коллекцию PropertyItems в классе Bitmap и непосредственно прочитать теги TIFF с изображения.

См. Спецификацию TIFF здесь: http://www.awaresystems.be/imaging/tiff/tifftags/baseline.html

Вы также можете посмотреть на размеры и разрешение изображения и сравнить его с размером файла, чтобы получить представление о количестве бит на пиксель. (Это, вероятно, не будет очень точным, учитывая сжатие и метаданные в изображении).

...