我正在尝试将多页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])并将其写入磁盘,它看起来就像是第一页。
我到底做错了什么?框架实际上不是图像的单个页面吗?我怎样才能把它们拿出来和它们一起工作?
答案 0 :(得分: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);
}