RenderTargetBitmap导致文本模糊

时间:2019-06-25 04:01:58

标签: c# uwp

在我的UWP应用中,我想使用RenderTargetBitmap创建和保存我使用的数据网格的图像。因为这些网格有时可能包含很多数据,所以我将网格以及scrollviewer内的其他元素放入其中,并将scrollviewer的内容传递给我的方法以渲染位图并另存为PNG:

public async Task SnapShotPNGAsync(UIElement source, StorageFile file)
    {
        RenderTargetBitmap renderTarget = new RenderTargetBitmap();

        await renderTarget.RenderAsync(source);

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

        using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
        {
            var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
            encoder.SetPixelData(BitmapPixelFormat.Bgra8,
                                 BitmapAlphaMode.Ignore,
                                 (uint)renderTarget.PixelWidth,
                                 (uint)renderTarget.PixelHeight,
                                 displayInformation.RawDpiX,
                                 displayInformation.RawDpiY,
                                 pixels);
            await encoder.FlushAsync();
        }
    }

但是,尽管没有以任何方式缩放位图,但是我得到了模糊的结果。虽然这里有一些类似的问题,但似乎没有一个解决我的问题。有些是WPF,包含了不适用于UWP的内容,有些则包含了一些也无济于事的建议,例如截取屏幕截图,这没有用,因为就像我说的那样,有时我的数据对于截屏来说太大了。 / p>

我正在创建的应用使用统计数据和遗传算法来尝试预测电视节目的更新或取消。这是应用程序中的网格外观:

https://i.imgur.com/so1cNCl.png

这是使用RenderTargetBitmap后的外观:

https://i.imgur.com/dXYIvjl.png

虽然图像仍然可读,但绝对模糊,这会使关注这些页面的人不必要地感到不愉快。我看到有人暗示也许是文本上的抗锯齿,但是我也看到这篇文章暗示总体上只是模糊了一切,而不仅仅是文本:

Rendering Canvas with RenderTargetBitmap is giving blurry images

我还发现具有较小的网格也可以产生更清晰的图像,因此似乎存在一个问题,即图像是从已经缩小的源中绘制,然后将其放大到原始分辨率,但是为什么呢?我该如何解决?

编辑:

我似乎已经以某种方式解决了该问题,但是我真的不知道自己做了什么。我可以回忆起尝试过的两件事。首先,我更改了要在XAML中而不是在代码中呈现的元素的背景色。我以前曾以编程方式更改背景,然后在渲染后将其恢复为透明,但我认为这是不必要的。

第二,我渲染的元素实际上是一个堆栈面板,它是滚动视图的内容。这样一来,我就可以在代码中在数据网格的顶部添加一些元素,例如图表标题和与正在呈现的数据相关的其他一些信息。堆栈面板位于滚动视图内部,因此即使并非全部显示在屏幕上,它也可以呈现所有内容。我注意到有时候,如果我的应用程序比要渲染的数据高,那么我在屏幕底部会有很大的空白,所以我所做的是将堆栈面板放入两行网格中,第一行具有自动高度,第二个高度*高度,以便在渲染到图像时,堆栈面板永远不会填充剩余的可用空间。

我不知道这些原因是原因还是我尝试了其他事情而无法记住。但是,我还注意到,有时在Windows Photos应用程序中生成的图像有时仍然看起来模糊,而在MSPaint中则不会,因此我可能也有一些错误地认为图像模糊的结果。但是,如以上示例所示,肯定有一些实际上是模糊的。仔细查看photoshop中的上述示例,几乎就像是在低不透明度下复制图像,并向右移动了约半个像素。

0 个答案:

没有答案