Nicht imstande, TIFF-Seiten von TiffBitmapDecoder.Frames abrufen - alle Bilder sind Seite 1

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

  •  06-07-2019
  •  | 
  •  

Frage

Ich versuche, ein Mehrseitentiff Bild in ein Multipage XPS-Dokument zu konvertieren. Das Problem, das ich habe, ist mit dem TiffBitmapDecoder und seine BitmapFrames.

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

Dies führt zu einem XPS mit der richtigen Anzahl von Seiten. Jede Seite ist jedoch eine Kopie der ersten Seite des TIFF. In der Tat, wenn ich einen einzigen Frame auswählen (sagen wir, dec.Frames [4]) und schreiben Sie es auf die Festplatte, es sieht aus wie die erste Seite.

Was zum Teufel mache ich hier falsch? Sind die Rahmen nicht wirklich die einzelnen Seiten des Bildes? Wie kann ich sie aus und arbeiten mit ihnen bekommen ???

War es hilfreich?

Lösung

Versuchen Sie den folgenden Code verwenden (die kommentierten Zeilen sind anders als Ihre 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); 
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top