我在这里有一种方法,它应该生成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]));
}
.

我没有测试上面的代码,对任何缺陷感到抱歉。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top