将BitmapSource转换为Image保留所有帧

时间:2012-01-26 08:55:31

标签: wpf image bitmapsource

我在这里有一个方法,应该生成一个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中读取一帧,丢失了帧信息?

如果有可能,我可以在方法签名中添加另一个参数,如下所示:

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

任何想法?

提前致谢!

1 个答案:

答案 0 :(得分: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]));
}

我没有测试上面的代码,对于任何缺陷都很抱歉。