全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Avalonia如何使用DrawingContext进行绘制 Avalonia底层绘图API

Avalonia 使用 DrawingContext 在 OnRender 中进行跨平台高性能 2D 绘制,基于 SkiaSharp 构建向量指令并光栅化;需缓存资源、避免频繁 Push/Pop、原点在左上角且单位为 DIP。

Avalonia 使用 DrawingContext 进行自定义绘制,主要在控件的 OnRender 方法中完成,其底层基于 SkiaSharp(默认渲染后端),提供跨平台、高性能的 2D 绘图能力。它不是直接操作像素,而是构建绘图指令列表,由 Skia 引擎最终光栅化。

在 OnRender 中获取并使用 DrawingContext

所有继承自 Visual 的类(如 ControlShape、自定义 Panel)均可重写 OnRender 方法:

  • 必须调用基类实现:`base.OnRender(context)` 通常需放在开头,确保子元素正常绘制(除非你完全接管)
  • context 是临时对象:仅在 OnRender 调用期间有效,不可缓存或跨帧复用
  • 坐标系原点在左上角,单位为设备无关像素(DIP),自动适配缩放和高 DPI

常用绘图操作与对应 API

DrawingContext 提供分层绘制能力,常见操作包括:

  • 绘制几何图形:`DrawGeometry(brush, pen, geometry)` —— 支持 RectangleGeometryEllipseGeometryPathGeometry
  • 绘制文本:`DrawText(formattedText, point)` —— 需先用 FormattedText 构建带样式的文本布局
  • 绘制图像:`DrawImage(bitmap, rect, opacity: 1.0)` —— 支持 IBitmap(如 Bitmap 实例)
  • 应用变换:通过 PushTransform + Matrix.CreateScale/Translate/Rotate 实现局部坐标系变换
  • 裁剪区域:`PushClip(geometry)` 限定后续绘制范围,匹配后需 PopClip

性能与注意事项

高效使用 DrawingContext 需注意以下关键点:

  • 避免在 OnRender 中创建资源:如 BrushPenFormattedText 应预先创建并缓存(例如在构造函数或 OnAttachedToVisualTree 中)
  • 减少 Push/Pop 调用次数:每次变换或裁剪都会增加绘制指令开销,尽量合并操作
  • 慎用透明度和混合模式:非 1.0 的 opacity 或自定义 CompositingMode 可能触发离屏渲染,影响性能
  • 不支持即时重绘控制:Avalonia 自动管理渲染时机(脏区检测 + 合成),手动调用 InvalidateVisual() 触发重绘即可

底层渲染链路简述

Avalonia 的绘图流程为:OnRenderDrawingContext 记录指令 → Scene 树收集所有视觉节点的绘制命令 → 渲染线程交由 SkiaRenderer(基于 SkiaSharp)执行光栅化 → 输出到窗口表面。这意味着:

  • 所有 DrawingContext 操作本质是构建向量指令,非立即像素操作
  • 无 Canvas.Children 类似 WPF 的“子元素集合”,绘图完全由代码逻辑驱动
  • 若需更底层控制(如直接 Skia 绘图),可继承 SkiaDrawingContext 或使用 ISkiaGpu,但会失去跨平台抽象层保障


# 后端  # win  # 重绘  # canva  # 构造函数  # 继承  # 线程  # 对象  # canvas  # wpf  # 自定义  # 高性能  # 放在  # 均可  # 重写  # 不支持  # 先用  # 链路  # 复用  # 需注意 


相关文章: 如何优化Golang Web性能_Golang HTTP服务器性能提升方法  建站之星如何配置系统实现高效建站?  如何高效搭建专业期货交易平台网站?  制作网站的模板软件,网站怎么建设?  如何打造高效商业网站?建站目的决定转化率  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  如何在搬瓦工VPS快速搭建网站?  北京专业网站制作设计师招聘,北京白云观官方网站?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  清除minerd进程的简单方法  如何在万网开始建站?分步指南解析  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  建站之星云端配置指南:模板选择与SEO优化一键生成  网站图片在线制作软件,怎么在图片上做链接?  兔展官网 在线制作,怎样制作微信请帖?  建站之星如何快速生成多端适配网站?  宁波自助建站系统如何快速打造专业企业网站?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  Bpmn 2.0的XML文件怎么画流程图  大学网站设计制作软件有哪些,如何将网站制作成自己app?  如何配置WinSCP新建站点的密钥验证步骤?  如何在云主机上快速搭建网站?  代购小票制作网站有哪些,购物小票的简要说明?  如何构建满足综合性能需求的优质建站方案?  如何将凡科建站内容保存为本地文件?  高端建站如何打造兼具美学与转化的品牌官网?  手机网站制作与建设方案,手机网站如何建设?  javascript中的try catch异常捕获机制用法分析  如何快速搭建自助建站会员专属系统?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  宿州网站制作公司兴策,安徽省低保查询网站?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  如何通过cPanel快速搭建网站?  建站之星安装提示数据库无法连接如何解决?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  无锡营销型网站制作公司,无锡网选车牌流程?  山东网站制作公司有哪些,山东大源集团官网?  如何在服务器上三步完成建站并提升流量?  长沙做网站要多少钱,长沙国安网络怎么样?  如何用西部建站助手快速创建专业网站?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何在宝塔面板中创建新站点?  ui设计制作网站有哪些,手机UI设计网址吗?  如何快速搭建高效可靠的建站解决方案?  测试制作网站有哪些,测试性取向的权威测试或者网站?  php json中文编码为null的解决办法  如何设置并定期更换建站之星安全管理员密码?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  微信小程序 五星评分(包括半颗星评分)实例代码  制作网站的过程怎么写,用凡科建站如何制作自己的网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。