Adam McMahon
Adam McMahon

Reputation: 800

Scale TextBox on RenderTargetBitmap without loss of quality

Does anybody know if there is a way to ensure that TextBoxes scale nicely on RenderTargetBitmap?

See my code below, I am attempting to produce an output file of a Canvas with various different elements in it.

Images scale perfectly fine with no loss of quality at all, same with my InkCanvas. But TextBoxes just don't scale well at all.

RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
//Produce a PNG output with a pixel size of 5x the onscreen canvas
await renderTargetBitmap.RenderAsync(MaskArea, (int)MaskArea.Width * 5, (int)MaskArea.Height * 5);

var pixelBuffer = await renderTargetBitmap.GetPixelsAsync();
var pixels = pixelBuffer.ToArray();
var displayInformation = DisplayInformation.GetForCurrentView();

var folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("Print", CreationCollisionOption.OpenIfExists);
var file = await folder.CreateFileAsync("Canvas" + ".png", CreationCollisionOption.ReplaceExisting);
using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
 {
    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
    encoder.BitmapTransform.InterpolationMode = BitmapInterpolationMode.Cubic;
    encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, (uint)renderTargetBitmap.PixelWidth, (uint)renderTargetBitmap.PixelHeight, displayInformation.RawDpiX, displayInformation.RawDpiY, pixels);
    await encoder.FlushAsync();
 }

I can't really understand why my InkCanvas in particular renders perfectly but yet TextBoxes lose quality. As a footnote, I'm aware that one way around it would be to manually add the Text to my output file afterwards with Win2D but I just thought I'd check here first in case I'm missing something.

Thanks

Output (You may have to click on the image to see the quality loss) Output

Upvotes: 0

Views: 213

Answers (0)

Related Questions