Как конвертировать SVG в WriteableBitmap в UWP C# - PullRequest
0 голосов
/ 01 мая 2020

Мы можем загрузить SVG с 1703 года в UWP. Может кто-нибудь предоставить механизм, как конвертировать SVG в WriteableBitmap в C# UWP.

1 Ответ

1 голос
/ 01 мая 2020

К сожалению, нет такого API, который мог бы конвертировать SVG в WriteableBitmap изображение напрямую, потому что когда мы конвертируем файл в WriteableBitmap, нам нужно использовать класс BitmapDecoder, как показано ниже, но BitmapDecoder не поддерживает тип svg.

private static async Task<WriteableBitmap> OpenWriteableBitmapFile(StorageFile file)
{
    using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read))
    {
        BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
        WriteableBitmap image = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight);
        image.SetSource(stream);

        return image;
    }
}

И в настоящее время у нас есть обходной путь, который использует RenderTargetBitmap для рендеринга вашего элемента управления изображением и преобразования RenderTargetBitmap в WriteableBitmap с последующим.

private async void RenderTargetBitmapToWriteableBitmap(UIElement element)
{
    var bitmap = new RenderTargetBitmap();
    await bitmap.RenderAsync(element);
    var pixelBuffer = await bitmap.GetPixelsAsync();
    byte[] pixels = pixelBuffer.ToArray();
    var wb = new WriteableBitmap((int)bitmap.PixelWidth, (int)bitmap.PixelHeight);
    using (Stream stream = wb.PixelBuffer.AsStream())
    {
        await stream.WriteAsync(pixels, 0, pixels.Length);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...