1

System.Drawing.Image インスタンスを生成するメソッドがここにあります。次の前提条件を考慮してください。

  • メソッド パラメータとして BitmapSource を取得します
  • 以下に、BitmapSource から Image への変換を行うコードを示します。

変換:

public Image ConvertBitmapSourceToImage(BitmapSource input)
{
    MemoryStream transportStream = new MemoryStream();
    BitmapEncoder enc = new BmpBitmapEncoder();
    enc.Frames.Add(BitmapFrame.Create(input));
    enc.Save(transportStream);
    transportStream.Seek(0, SeekOrigin.Begin);
    return Image.FromStream(transportStream);
}

BitmapSource が Multipage Tif ファイルから作成されたとします。私がする必要があるのは、n 番目のページをコードで使用できるようにすることです。BitmapSource クラスはこれをサポートしていないので、入力から最初のフレーム以外を取得する方法を知っていますか? それとも、BitmapSource は Tif 全体を 1 つのフレームとして読み込み、フレーミング情報を失いますか?

可能であれば、次のようにメソッド シグネチャに別のパラメーターを追加できます。

public Image ConvertBitmapSourceToImage(BitmapSource input, int frame)
{
   ///[..]
}

何か案は?

前もって感謝します!

4

1 に答える 1

0

既に述べたように、BitmapSource は複数のフレームをサポートしていません。おそらく、TIFF がデコードされ、すべてのフレームから画像を変換するポイントに介入するオプションになるでしょう。

TiffBitmapDecoder decoder = new TiffBitmapDecoder(...) // use stream or uri here
System.Drawing.Image[] images = new System.Drawing.Image[decoder.Frames.Count];

for (int i = 0; i < decoder.Frames.Count; i++)
{
    // use your converter function here
    images[i] = ConvertBitmapSourceToImage(decoder.Frames[i]));
}

上記のコードはテストしていないため、欠陥があれば申し訳ありません。

于 2012-01-29T18:18:28.987 に答える