将BitMapsource转换为图像保留所有帧
-
14-11-2019 - |
题
我在这里有一种方法,它应该生成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); }
现在想象,已经从多页tIF文件创建了位峰源。我需要做的是在代码中提供任何第n个页面。BitMapSource类没有为此提供支持,所以您是否知道如何获得任何一个,而是从我的输入中提供的第一帧?或者在整个TIF中读取的位压力作为一帧,丢失框架信息?
如果可以,我可以将另一个参数添加到我的方法签名,如:
.public Image ConvertBitmapSourceToImage(BitmapSource input, int frame) { ///[..] }
任何想法?
提前感谢!
解决方案
正如您所说的那样,位掩码不支持多个帧。也许是在从每个帧中解码并转换图像的点处介入的选项:
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]));
}
.
我没有测试上面的代码,对任何缺陷感到抱歉。
不隶属于 StackOverflow