2

TIFF 画像を扱うドキュメント データベース アプリケーションを開発しています。画像に注釈を付ける場合、モノクロ (Format1bppIndexed) 画像の選択肢として白黒のみを提示するユーザー インターフェイスと、色深度の高い画像の複数の色を提示するためには、TIFF がモノクロかどうかをテストする必要があります。これが私の機能です:

private bool IsBitonal(string filePath)
{
    bool isBitonal = false;
    試す
    {
        ビットマップ bitmap = new Bitmap(sourceFilePath);
        Graphics graphics = Graphics.FromImage(bitmap);
    }
    キャッチ(例外例)
    {
        isBitonal = true;
    }
    戻り値はBitonalです。
}

機能しますが、優雅ではありません。スローされるインデックス付きピクセル形式の例外については、http: //msdn.microsoft.com/en-us/library/system.drawing.graphics.fromimage.aspxで説明されています。

通常のプログラム フローで例外をトラップすることは、適切な方法ではありません。また、別の例外がスローされる可能性も考えられます。例外のトラップに依存しない IsBitonal 関数を実装するより良い方法はありますか?

Web で情報を検索してみましたが、TIFF 画像を読み込み、別の形式に変換して例外を回避する方法の例を見つけましたが、TIFF 画像がモノクロかどうかの簡単なテストの例は見つかりませんでした。

ありがとう。

4

1 に答える 1

4

ビットマップの PixelFormat プロパティを確認できますか?

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

それがうまくいかない場合は、Bitmap クラスの PropertyItems コレクションを見て、画像から TIFF タグを直接読み取ることができるはずです。

ここで TIFF 仕様を参照してください: http://www.awaresystems.be/imaging/tiff/tifftags/baseline.html

また、画像の寸法と解像度を確認し、ファイルサイズと対比して、ピクセルあたりのビット数を把握することもできます。(これは、画像の圧縮とメタデータを考えると、おそらくあまり正確ではありません)。

于 2010-01-30T06:10:32.160 に答える