2012-01-26 37 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讀入一幀,從​​而丟失了幀信息?

如果有可能,我可以另一種參數添加到我的方法簽名,就像這樣:

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

什麼想法?

在此先感謝!

+0

我不清楚你的多幅圖像應該如何顯示,甚至是「導航」。如果他們並排躺在一起,或者彼此躺在一起,用鼠標點擊它們即可。請提供更多關於如何使用這種多圖像控制的信息。 – Clemens

+0

對不起,這可能沒有很好的制定。我打算僅顯示當前的頁面,導航只會增加或減少PageSelection。所以,當導航向前移動時,我想要顯示圖像的第二幀而不是第一幀。圖像類支持多幀,但我只能輸入一個BitmapSource(從多頁Tiff文件生成)。 –

+1

[MSDN](http://msdn.microsoft.com/zh-cn/library/system.windows.controls.image.aspx)說'顯示多幀圖像時,只顯示第一幀。 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])); 
} 

我沒有測試上面的代碼,對任何瑕疵很抱歉。