首页 > 解决方案 > 是否有可能将 UI 元素转换为多个图像(UWP)

问题描述

我尝试将 UI 元素保存到图像文件中。但是我们有更多的 UI 元素(比如 100 个行列表)。所以画质很差。是否有可能将 UI 元素转换为多个图像或获得高质量的图像,请为此分享一些建议。

我尝试使用以下代码保存图像文件:

   public async Task GenereateImage(UIElement root)
   {
        RenderTargetBitmap renderTargetBitmap1 = new RenderTargetBitmap();
        await renderTargetBitmap1.RenderAsync(root, (int)root.RenderSize.Width, (int)root.RenderSize.Height);
        var pixelBuffer1 = await renderTargetBitmap1.GetPixelsAsync();

        var disply = DisplayInformation.GetForCurrentView();

        var savePicker = new FileSavePicker();
        savePicker.DefaultFileExtension = ".png";
        savePicker.FileTypeChoices.Add(".png", new List<string> { ".png" });
        savePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
        savePicker.SuggestedFileName = "snapshot.png";
        // Prompt the user to select a file
        var saveFile = await savePicker.PickSaveFileAsync();
        // Verify the user selected a file
        if (saveFile == null)
            return;
        // Encode the image to the selected file on disk
        using (var fileStream = new Windows.Storage.Streams.InMemoryRandomAccessStream())
        {
            var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, fileStream);
            encoder.SetPixelData(
                BitmapPixelFormat.Bgra8,
                BitmapAlphaMode.Ignore,
                (uint)renderTargetBitmap1.PixelWidth,
                (uint)renderTargetBitmap1.PixelHeight,
                DisplayInformation.GetForCurrentView().LogicalDpi,
                DisplayInformation.GetForCurrentView().LogicalDpi,
                pixelBuffer1.ToArray());
            await encoder.FlushAsync();
        }
    }

结果图像如下:

在此处输入图像描述

标签: uwprendertargetbitmap

解决方案


推荐阅读