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 读取为一帧,丢失了帧信息?

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

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 回答