Impossible de récupérer les pages TIFF à partir de TiffBitmapDecoder.Frames & # 8212; tous les cadres sont la page 1

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

  •  06-07-2019
  •  | 
  •  

Question

J'essaie de convertir une image tiff multipage en un document XPS multipage. Le problème que je rencontre concerne le TiffBitmapDecoder et ses BitmapFrames.

Voici le code:

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"));
    }
}

Cela donne un XPS avec le nombre correct de pages. Cependant, chaque page est une réplique de la première page du tiff. En fait, si je choisis une seule image (disons, dec.Frames [4]) et l’écris sur le disque, elle ressemble à la première page.

Qu'est-ce que je fais mal ici? Les cadres ne sont-ils pas réellement les pages individuelles de l'image? Comment puis-je les sortir et travailler avec eux ???

Était-ce utile?

La solution

Essayez d’utiliser le code suivant (les lignes commentées sont différentes de votre version):

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); 
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top