2012-01-26 7 views
1

ここには、System.Drawing.Imageインスタンスを生成するはずのメソッドがあります。次prerequesitesを考えてみましょう:BitmapSourceをすべてのフレームを保持するイメージに変換する

  • 私はあなたがイメージにしたBitmapSourceから 変換を行うコードを見つけるには、下記の方法パラメータ
  • としたBitmapSourceを取得します。

変換:

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

ことが可能であったならば、私はそうのように、私のメソッドシグネチャに別のパラメータを追加することができます。

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

任意のアイデア?

ありがとうございます!

+0

あなたの複数の画像をどのように表示したり、ナビゲートしたりするべきかはわかりません。マウスをクリックするだけで、横に横たわっているか、お互いの上に横たわっていなければなりません。このようなマルチイメージコントロールの使い方について少し詳しい情報を提供してください。 – Clemens

+0

申し訳ありませんが、それはおそらくよく策定されていませんでした。現在のページだけを表示するつもりです。ナビゲーションはPageSelectionを増減します。したがって、ナビゲーションが進むと、最初のフレームの代わりにイメージの2番目のフレームを表示します。イメージクラスはマルチフレームをサポートしていますが、入力として取得するのはBitmapSource(Multipage Tiffファイルから生成)だけです。 –

+1

[MSDN](http://msdn.microsoft.com/en-us/library/system.windows.controls.image.aspx)には、「マルチフレームイメージを表示すると、最初のフレームのみが表示されます。マルチフレーム画像のアニメーションはImageコントロールではサポートされていません。フレームごとに1つのImageを作成する方が良いかもしれません。 – Clemens

答えて

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

私が不備のためにとても申し訳ありませんが、上記のコードをテストしていません。

関連する問題