我的问题非常直截了当:是否可以将Avalonia.Media.Geometry
绘制到Avalonia.Media.Bitmap
上,这样我就可以将生成的图像保存到蒸汽中,同时也可以用ImageBrush
来使用整个过程
在System.Drawing
名称空间中,可以简单地调用Graphics.FromImage(mySystemDrawingBitmap);
来获取Graphics
对象,然后可以使用该对象绘制任何您想要的几何图形。
在Avalonia有类似的简单方法吗?我从RenderTargetBitmap
中挖掘出了一个名为文档的东西,它看起来很有前途,因为它有一个名为CreateDrawingContext
的方法,但是它显然需要一个IVisualBrushRenderer
(不管是什么)实例作为一个参数。似乎有一个叫做ImmediateRenderer
的东西实现了said接口,但是它需要一个Avalonia.VisualTree.IVisual
本身作为它的构造函数中的一个参数。在这个阶段,我有点怀疑RenderTargetBitmap
对于我的问题是否有用,因为它似乎有大量随机需要的对象实例的开销,我并不想要或者不需要,而且我不会仅仅为了在位图上画东西而创建一个虚拟的IVisual
实例。它只是有一种可怕的代码气味。
Sooo:将Avalonia.Media.Geometry
(例如用Geometry.Parse()
创建的)呈现到Avalonia.Media.Bitmap
上。你到底是怎么做到的,应该怎么做?
发布于 2021-02-09 18:58:00
void RenderToFile(Geometry geometry, Brush brush, string path)
{
var control = new DrawingPresenter()
{
Drawing = new GeometryDrawing
{
Geometry = geometry, Brush = brush,
},
Width = geometry.Bounds.Right,
Height = geometry.Bounds.Bottom
};
RenderToFile(control, path);
}
void RenderToFile(Control target, string path)
{
var pixelSize = new PixelSize((int) target.Width, (int) target.Height);
var size = new Size(target.Width, target.Height);
using (RenderTargetBitmap bitmap = new RenderTargetBitmap(pixelSize, new Vector(96, 96)))
{
target.Measure(size);
target.Arrange(new Rect(size));
bitmap.Render(target);
bitmap.Save(path);
}
}
https://stackoverflow.com/questions/66124655
复制相似问题