2009-05-06 11 views
1

複数ページのTIFF画像を複数ページのXPS文書に変換しようとしています。私が持っている問題は、TiffBitmapDecoderとそのBitmapFramesです。TiffBitmapDecoderからTIFFページを取得できません。フレーム - すべてのフレームが1ページです。

は、ここでは、コードです:

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の最初のページの複製です。実際に、1つのフレーム(たとえばdec.Frames [4])を取り出してディスクに書き込むと、最初のページのように見えます。

私はここで間違っていますか?フレームは実際にイメージの個々のページではありませんか?どのように私はそれらを取得し、それらと仕事をすることができますか?

答えて

1

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

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

はこれをチェックアウトします。 – Will

関連する問題