TiffBitmapDecoder.FramesからTIFFページを取得できません—すべてのフレームはページ1です

StackOverflow https://stackoverflow.com/questions/830386

  •  06-07-2019
  •  | 
  •  

質問

マルチページTIFFイメージをマルチページXPSドキュメントに変換しようとしています。私が抱えている問題は、TiffBitmapDecoderとそのBitmapFramesにあります。

コードは次のとおりです。

private static void ToXpsDocument(string imageName, string xpsName)
{
    using (var p = Package.Open(xpsName))
    {
        PackageStore.AddPackage(new Uri("pack://thedocloljk.xps"), p);
        XpsDocument doc = new XpsDocument(p);
        var writer = XpsDocument.CreateXpsDocumentWriter(doc);
        var dec = new TiffBitmapDecoder
                          (new Uri(imageName),
                          BitmapCreateOptions.IgnoreImageCache,
                          BitmapCacheOption.None);

        var fd = new FixedDocument();
        foreach (var frame in dec.Frames)
        {
            var image = new System.Windows.Controls.Image();
            image.Source = frame;
            var fp = new FixedPage();
            fp.Children.Add(image);
            fp.Width = frame.Width;
            fp.Height = frame.Height;
            var pc = new PageContent();
            (pc as IAddChild).AddChild(fp);
            fd.Pages.Add(pc);
        }
        writer.Write(fd);
        p.Flush();
        p.Close();
        PackageStore.RemovePackage(new Uri("pack://thedocloljk.xps"));
    }
}

これにより、正しいページ数のXPSが作成されます。ただし、すべてのページはtiffの最初のページのレプリカです。実際、単一のフレーム(たとえば、dec.Frames [4])を取り出してディスクに書き込むと、最初のページのように見えます。

ここで何が間違っているのですか?フレームは実際には画像の個々のページではありませんか?どうすればそれらを取り出して作業できますか?

役に立ちましたか?

解決

次のコードを使用してみてください(コメント行はバージョンと異なります):

foreach (var frameSource in dec.Frames) // note this line
{
    var frame = BitmapFrame.Create(frameSource); // and this line
    var image = new System.Windows.Controls.Image(); 
    image.Source = frame; 
    var fp = new FixedPage(); 
    fp.Children.Add(image); 
    fp.Width = frame.Width; 
    fp.Height = frame.Height; 
    var pc = new PageContent(); 
    (pc as IAddChild).AddChild(fp); 
    fd.Pages.Add(pc); 
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top