Преобразование Win2D CanvasRenderTarget в BitmapImage? - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь написать функцию, которая принимает мой ICanvasEffect в качестве параметра (в моем случае это Win2D BlendEffect ), и я хочу преобразовать CanvasRenderTarget в BitmapImage , чтобы я мог использовать его в элементе управления UWP Image :

    private async Task<BitmapImage> GetBitmapImage(CancellationToken ct, ICanvasImage effect)
    {
        using (var target = new CanvasRenderTarget(CanvasDevice.GetSharedDevice(), 320f, 240f, 96))
        {
            using (var ds = target.CreateDrawingSession())
            {
                // Draw the image with the supplied ICanvasImage
                ds.DrawImage(effect);
            }

            //await target.SaveAsync(outputStream, CanvasBitmapFileFormat.Jpeg).AsTask(ct);
        }
    }

Как вы видите в прокомментированном коде, CanvasRenderTarget имеет метод SaveAsync , который я могу использовать для его сохранения в потоке, но как?

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Разобрался:

    using (var stream = new InMemoryRandomAccessStream())
    {
        await target.SaveAsync(stream, CanvasBitmapFileFormat.Jpeg).AsTask(ct);

        var bmp = new BitmapImage();

        stream.Seek(0);
        await bmp.SetSourceAsync(stream);
    }
0 голосов
/ 10 сентября 2018

Как вы видите в закомментированном коде, CanvasRenderTarget имеет метод SaveAsync, который я могу использовать для его сохранения в Stream, но как?

Если вы хотите сохранить его в потоковом режиме, вы можете обратиться к Образцам Win2D .

Есть много примеров, показывающих, как использовать CanvasRenderTarget.SaveAsync () метод.

Например, Win2D-Samples / ExampleGallery / Infrastructure / AppIconGenerator.cs # L217

...