首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在位图上绘制几何图形(Avalonia)

在位图上绘制几何图形(Avalonia)
EN

Stack Overflow用户
提问于 2021-02-09 18:10:48
回答 1查看 831关注 0票数 0

我的问题非常直截了当:是否可以将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上。你到底是怎么做到的,应该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-09 18:58:00

代码语言:javascript
运行
复制
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);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66124655

复制
相关文章

相似问题

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