我在这里有一个方法,应该生成一个System.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);
}
现在想象一下BitmapSource是从Multipage Tif文件创建的。我需要做的是在代码中提供任何第n页。 BitmapSource类不支持这个,所以你知道如何从输入中获取除第一帧之外的任何一个吗?或者BitmapSource在整个Tif中读取一帧,丢失了帧信息?
如果有可能,我可以在方法签名中添加另一个参数,如下所示:
public Image ConvertBitmapSourceToImage(BitmapSource input, int frame)
{
///[..]
}
任何想法?
提前致谢!
答案 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]));
}
我没有测试上面的代码,对于任何缺陷都很抱歉。