2009-05-06 3 views
1

J'essaie de convertir une image TIFF multipage en un document XPS multipage. Le problème que j'ai est avec le TiffBitmapDecoder et ses BitmapFrames.Impossible de récupérer des pages TIFF à partir de TiffBitmapDecoder.Frames - toutes les images sont à la page 1

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

Il en résulte un XPS avec le nombre de pages. Cependant, chaque page est une réplique de la première page du tiff. En fait, si je choisis une seule image (par exemple, décommandes [4]) et l'écris sur le disque, cela ressemble à la première page.

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

Répondre

1

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); 
} 
+0

Est-ce que vérifier. – Will

Questions connexes