我正在尝试将一个包含WPF的XPS文件进行转换。
我的目的是可以使用Silverlight 4来加载这些图片,为此我正在使用以下代码:
// XPS Document
XpsDocument xpsDoc = new XpsDocument(xpsFileName, System.IO.FileAccess.Read);
FixedDocumentSequence docSeq = xpsDoc.GetFixedDocumentSequence();
// The number of pages
PageCount = docSeq.References[0].GetDocument(false).Pages.Count;
DocumentPage sizePage = docSeq.DocumentPaginator.GetPage(0);
PageHeight = sizePage.Size.Height;
PageWidth = sizePage.Size.Width;
// Scale dimensions from 96 dpi to 600 dpi.
double scale = 300/ 96;
// Convert a XPS page to a PNG file
for (int pageNum = 0; pageNum < PageCount; pageNum++)
{
DocumentPage docPage = docSeq.DocumentPaginator.GetPage(pageNum);
BitmapImage bitmap = new BitmapImage();
RenderTargetBitmap renderTarget =
new RenderTargetBitmap((int)(scale * (docPage.Size.Height + 1)),
(int)(scale * (docPage.Size.Height + 1)),
scale * 96,
scale * 96, PixelFormats.Pbgra32);
renderTarget.Render(docPage.Visual);
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(renderTarget));
FileStream pageOutStream = new FileStream(name + ".Page" + pageNum + ".png", FileMode.Create, FileAccess.Write);
encoder.Save(pageOutStream);
pageOutStream.Close();
这段代码取自http://xpsreader.codeplex.com/,一个将XPS文档转换的项目。运行得很好!但问题在于图像分辨率低且模糊。我做了一些研究,并在这个页面上找到了RenderTargetBitmap的解决方案。
问题在于您没有使用硬件RenderTargetBitmap渲染。
一种解决方案是使用DirectX与WPF来实现,但我还没有找到任何清晰的示例来指导正确的操作方式。
非常感谢您的建议。提前致谢。
更新:我附加了XPS文档,我正在尝试转换图像 请下载test.xps