我正在研究.Net MAUI,我在我的应用程序中使用了本地渲染。因此,对于Windows (WinUi-3),我在CanvasRenderTarget对象上呈现了绘图,现在我必须将其作为ImageSource(MAUI)提供给用户。
我试图从canvasrendertarget对象中获取Pixels,然后再到流源。但是将这个流源设置为Image控件,我无法获得图像输出。
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?
发布于 2022-04-20 17:20:26
您正在尝试从原始像素数据创建一个ImageSource,但是FromStream需要一个编码的PNG或JPG图像。
为了能够做到这一点,您需要首先对原始像素数据进行编码--幸运的是,已经有了在Windows.Graphics.Imaging.BitmapEncoder中这样做的实现。
下面是代码片段的工作版本,我们在其中创建一个BitmapEncoder,它将将像素数据转换为PNG图像。然后,只需使用适当的参数调用SetPixelData以生成所述图像:
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());https://stackoverflow.com/questions/71926336
复制相似问题