我的任务是向用户显示其 XPS 文档每一页的缩略图。我需要所有图像都很小,所以我将它们的dpi设置为 72.0(我用谷歌搜索了 dpi 72.0 的 A4 纸的尺寸是 635x896)。基本上,我执行以下操作:
List<BitmapImage> thumbnails = new List<BitmapImage>();
documentPaginator.ComputePageCount();
int pageCount = documentPaginator.PageCount;
for (int i = 0; i < pageCount; i++)
{
DocumentPage documentPage = documentPaginator.GetPage(i);
bool isLandscape = documentPage.Size.Width > documentPage.Size.Height;
Visual pageVisual = documentPage.Visual;
//I want all the documents to be less or equals to A4
//private const double A4_SHEET_WIDTH = 635;
//private const double A4_SHEET_HEIGHT = 896;
//A4 sheet size in px, considering 72 dpi
RenderTargetBitmap targetBitmap = new RenderTargetBitmap(
(int)(System.Math.Min(documentPage.Size.Width, A4_SHEET_WIDTH)),
(int)(System.Math.Min(documentPage.Size.Height, A4_SHEET_HEIGHT)),
72.0, 72.0,
PixelFormats.Pbgra32);
targetBitmap.Render(pageVisual);
BitmapFrame frame = BitmapFrame.Create(targetBitmap);
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(frame);
BitmapImage image = new BitmapImage();
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
encoder.Save(ms);
image.BeginInit();
image.CacheOption = BitmapCacheOption.OnLoad;
image.StreamSource = ms;
if (isLandscape)
{
image.Rotation = Rotation.Rotate270;
}
image.EndInit();
}
thumbnails.Add(image);
}
但是当我渲染一个文档页面 (A4) 时,它的大小实际上是846x1194,而不是我预期的。我试图使 dpi 更低(48.0)并且图像的尺寸变得更大(我想,我只是不太明白 dpi 是什么以及它如何影响文档)。我尝试制作dpi=96.0,尺寸变小了。BitmapImage
我将上面代码生成的类实例集合中的一个图像设置为Image
控件的源(我正在创建一个 WPF 应用程序),如果 dpi 设置为 96.0,我的程序如下所示:
如您所见,部分页面根本没有显示,它不适合Image
控件,即使控件的大小设置为635x896,这就是为什么根据上面的代码,图像必须正确显示并且所有文本必须合适。
简而言之,我期望得到什么结果:我正在尝试创建文档页面的缩略图,但我希望它们相对于某个数字更小(对不起,我不太确定我该怎么说这些东西用英语,基本上如果文档的页面宽度是 1200 像素,我希望它是1200/n
,其中n是我前面提到的“某个数字”),但是如果缩小图像的尺寸仍然大于635x896,我希望尺寸为635x896 .
提前致谢。我也很抱歉我的英语不好。