Zoomen Rendern einer PDF-Seite in eine CanvasBitmap und Zeichnen dieses Bild auf einem VirtualCanvasControl. Aber wenn ich das Bild zoome, wird das Bild pixelig. Ich habe versucht, nur den Teil darzustellen, der sichtbar ist, aber das scheint nicht zu funktionieren. Was mache ich falsch?Eine gerenderte PDF in VirtualCanvasControl
<ScrollViewer Grid.RowSpan="2"
Grid.Row="0"
Name="PdfScrollViewer"
ZoomMode="Enabled"
MaxZoomFactor="4"
MinZoomFactor="0.8"
HorizontalScrollBarVisibility="Visible"
VerticalScrollBarVisibility="Visible"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
BringIntoViewOnFocusChange="False">
<canvas:CanvasVirtualControl x:Name="PageRenderCanvas" RegionsInvalidated="PageRenderCanvas_OnRegionsInvalidated"
/>
</ScrollViewer>
The RegionsInvalidated Eventhandler:
private async void PageRenderCanvas_OnRegionsInvalidated(CanvasVirtualControl sender,
CanvasRegionsInvalidatedEventArgs args)
{
PdfPageRenderOptions options = new PdfPageRenderOptions();
options.DestinationWidth = (uint) (PdfScrollViewer.ActualWidth*PdfScrollViewer.ZoomFactor);
options.DestinationHeight = (uint) (PdfScrollViewer.ActualHeight*PdfScrollViewer.ZoomFactor);
options.SourceRect = args.VisibleRegion;
var output = new MemoryStream().AsRandomAccessStream();
await page.RenderToStreamAsync(output, options); // page is the PDFPage
var image = await CanvasBitmap.LoadAsync(PageRenderCanvas, output);
using (var ds = sender.CreateDrawingSession(args.InvalidatedRegions[0]))
{
ds.DrawImage(image, args.VisibleRegion);
ds.Dispose();
}
}
Yeah Ich habe diesen Ansatz bereits abgebrochen, es dauert zu viel Speicher auf Handys. Ich versuche nur den sichtbaren Teil zu rendern, aber es ist auch verschwommen. – Thommy