RenderTargetBitmap отображает изображение неправильного размера
Моя задача - показать пользователю эскиз каждой страницы своего XPS-документа. Мне нужно, чтобы все изображения были маленькими, поэтому я рендерил ихточек на дюйм установить 72,0 (я гуглил, что размер листа А4 с dpi 72,0 составляет 635x896). В основном я делаю следующее:
List thumbnails = new List();
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) и изображениеРазмер s увеличился (я думаю, я просто не совсем понимаю, что такое dpi и как это влияет на документ). Я пытался сделатьдюйм = 96,0и размер стал меньше. Я установил одно из изображений из коллекции экземпляров классаBitmapImage
сгенерированный приведенным выше кодом в качестве источника дляImage
control (я создаю приложение WPF), и если dpi установлен на 96.0, моя программа выглядит следующим образом:
Как видите, часть страницы вообще не отображается, она не помещается внутриImage
контроль, даже если размер элемента управления установлен на635x896 тот'Поэтому, согласно приведенному выше коду, изображение должно отображаться правильно и весь текст должен соответствовать.
Какой результат я ожидаю в двух словах: я пытаюсь создать миниатюры страниц документа, но я хочу, чтобы они были меньше по сравнению с каким-либо числом (извините, я не совсем уверен, как мне сказать такие вещи на английском языке, в основном, если документс шириной страницы 1200 пикселей, я хочу, чтобы это было1200/n
где n это "какой-то номер что я упоминал ранее), но если сжатое изображениеразмер s все еще больше чем635x896 Я хочу чтобы размер был635x896.
Заранее спасибо. А также я прошу прощения за мой плохой английский.