RenderTargetBitmap renderuje obraz o złym rozmiarze

Moim zadaniem jest pokazanie użytkownikowi miniatury każdej strony jego dokumentu XPS. Potrzebuję wszystkich obrazów, aby były małe, więc renderuję jedpi ustawiona na 72,0 (Google szuka tego rozmiaru arkusza A4 z rozdzielczością 72,0 x 635 x 896). Zasadniczo wykonuję następujące czynności:

        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);
        }

Ale kiedy renderuję stronę dokumentu (A4), jej rozmiar jest w rzeczywistości846x1194 zamiast tego, którego oczekiwałem. Starałem się, aby rozdzielczość była niższa (48,0), a rozmiar obrazu stał się jeszcze większy (chyba nie rozumiem, czym jest dpi i jak wpływa na dokument). Próbowałem to zrobićdpi = 96,0, a rozmiar zmniejszył się. Ustawiłem jeden z obrazów z kolekcji instancji klasyBitmapImage wygenerowany przez powyższy kod jako źródłoImage kontrola (tworzę aplikację WPF) iw przypadku, gdy dpi jest ustawiona na 96,0 mój program wygląda tak:


Jak widać, część strony nie jest w ogóle pokazywana, nie mieści się w środkuImage kontrola, nawet jeśli rozmiar kontrolki jest ustawiony na635x896 dlatego zgodnie z powyższym kodem obraz musi być wyświetlany poprawnie, a cały tekst musi pasować.
Jakiego rezultatu oczekuję w skrócie: staram się tworzyć miniatury stron dokumentu, ale chcę, aby były mniejsze, w stosunku do pewnej liczby (przepraszam, nie jestem do końca pewien, jak mam takie rzeczy powiedzieć) po angielsku, w zasadzie, jeśli szerokość strony dokumentu wynosi 1200 px, chcę, żeby była1200/n, gdzien jest „pewną liczbą”, o której wspomniałem wcześniej), ale jeśli rozmiar zmniejszonego obrazu jest nadal większy niż635x896 Chcę, żeby rozmiar był635x896.
Z góry dziękuję. A także przepraszam za mój zły angielski.

questionAnswers(1)

yourAnswerToTheQuestion