首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在CanvasRenderTarget中将ImageSource转换为WinUI

在CanvasRenderTarget中将ImageSource转换为WinUI
EN

Stack Overflow用户
提问于 2022-04-19 14:06:29
回答 1查看 86关注 0票数 2

我正在研究.Net MAUI,我在我的应用程序中使用了本地渲染。因此,对于Windows (WinUi-3),我在CanvasRenderTarget对象上呈现了绘图,现在我必须将其作为ImageSource(MAUI)提供给用户。

我试图从canvasrendertarget对象中获取Pixels,然后再到流源。但是将这个流源设置为Image控件,我无法获得图像输出。

代码语言:javascript
运行
复制
             renderTarget = new CanvasRenderTarget(CanvasDevice.GetSharedDevice(),(float) 400, (float)400, 96);
             using (var ds = renderTarget.CreateDrawingSession())
             {     
                ds.FillCircle(10, 10, 400, Windows.UI.Color.FromArgb(250, 140, 120, 150));
             }
    
             byte[] bytes = renderTarget.GetPixelBytes();

            //Setting the Stream source to my Image control
            imageview.Source = ImageSource.FromStream(() => new MemoryStream(bytes));

不确定我遗漏了什么,如何将WinUi RenderTarget对象转换为MAUI.ImageSource?

EN

回答 1

Stack Overflow用户

发布于 2022-04-20 17:20:26

您正在尝试从原始像素数据创建一个ImageSource,但是FromStream需要一个编码的PNG或JPG图像。

为了能够做到这一点,您需要首先对原始像素数据进行编码--幸运的是,已经有了在Windows.Graphics.Imaging.BitmapEncoder中这样做的实现。

下面是代码片段的工作版本,我们在其中创建一个BitmapEncoder,它将将像素数据转换为PNG图像。然后,只需使用适当的参数调用SetPixelData以生成所述图像:

代码语言:javascript
运行
复制
            var renderTarget = new CanvasRenderTarget(CanvasDevice.GetSharedDevice(), (float)400, (float)400, 96);

            using (var ds = renderTarget.CreateDrawingSession())
            {
                ds.FillCircle(10, 10, 400, Windows.UI.Color.FromArgb(250, 140, 120, 150));
            }

            byte[] bytes = renderTarget.GetPixelBytes();

            var stream = new InMemoryRandomAccessStream();
            var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
            encoder.SetPixelData(BitmapPixelFormat.Rgba8 , BitmapAlphaMode.Straight, 400, 400, 96, 96, bytes);
            await encoder.FlushAsync();

            //Setting the Stream source to my Image control
            imageview.Source = ImageSource.FromStream(() => stream.AsStream());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71926336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档