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.

Заранее спасибо. А также я прошу прощения за мой плохой английский.

Ответы на вопрос(1)

Ваш ответ на вопрос