Есть ли возможность преобразовать элементы пользовательского интерфейса в несколько изображений (UWP) - PullRequest
1 голос
/ 06 августа 2020

Я пытаюсь сохранить элементы пользовательского интерфейса в файл изображения. но у нас больше элементов пользовательского интерфейса (например, список из 100 строк). Так что качество изображения очень плохое. Есть ли возможность преобразовать элементы пользовательского интерфейса в несколько изображений или получить изображение с высоким качеством, пожалуйста, поделитесь некоторыми предложениями по этому поводу.

Я попытался сохранить файл изображения, используя приведенный ниже код:

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

Результат будет примерно таким:

введите описание изображения здесь

...