ビットマップソースをすべてのフレームに保つイメージに変換する

StackOverflow https://stackoverflow.com/questions/9015728

  •  14-11-2019
  •  | 
  •  

質問

ここではシステム.Drawing.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);
    }
    
    .

    現在のTIFファイルからBitMapSourceが作成されたことを想像します。私がする必要があるのは、コードでN番目のページを使用可能にすることです。BitMapSourceクラスはこれをサポートしていないので、あなたは私の入力から最初のフレームを取得する方法を知っていますか?またはBitmapsSourceは全体のフレームを1フレームとして読み、フレーミング情報を失いますか?

    可能であれば、私はMy Metho Signatureに別のパラメータを追加することができます。

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

    任意のアイデア?

    事前にありがとう!

役に立ちましたか?

解決

あなたがすでに言ったように、ビットマップソースは複数のフレームをサポートしていません。おそらく、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]));
}
.

私は上記のコードをテストしませんでした、だからどんな欠陥でも申し訳ありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top