AGG-SVG学习笔记 [2015-07-07]

Matplotlib inline原理与Jupyter可视化避坑指南 Matplotlib是Python最主流的数据可视化库,而%matplotlib inline则是Jupyter Notebook中控制图表渲染行为的核心机制。它并非简单开启绘图功能,而是通过切换Matplotlib后端、劫持plt.show()调用、自动管理Figure生命周期等底层操作,实现图像在Notebook输出区的内联嵌入。这一机制直接影响渲染质量(PNG/SVG选择)、显示清晰度(DPI配置)、中文支持(字体回退链)及内存稳定性(auto-close策略)。掌握其原理,可规避图不显示、叠图、模糊 阅读详情

河南洛阳 祝小鹰 2015-07-07

接触AGG一年多,积累了一些心得体会。现在贴出来与大家分享。

注1:学习笔记按记录时间的逆序排列。
注2:当初学习AGG的目的是为了绘制SVG图形文件,因此夹杂了一些SVG的内容。
注3:早期的笔记由于刚接触AGG,可能存在一些错误。

例程和库文件下载:http://pan.baidu.com/s/1o6OhqMQ


-----------------------------------------------------------------------
关于SVG中<linearGradinet>、<radialGradient>的属性xlink:href的补充说明:

- 只有在不包含<stop>子元素的情况下,才“继承”引用元素的<stop>子元素。

- 如果引用的url不存在,则忽略xlink:href属性。

- 允许间接引用,例如lg3引用lg2,而lg2引用lg1。

- <linearGradinet>可引用<radialGradient>,反之亦可。


-----------------------------------------------------------------------
AGG的marker locator(vcgen_markers_term)在处理分段线段时,每一个子线段都会生成一组起点和终点的定位信息。也就是说,每一个子线段的起点和终点都将绘制标记点。但是SVG仅在第一个起点和最后一个终点处绘制标记点。

因此为svg_viewer编写了一个类模板svg_markers_term,用于将AGG的marker locator转换为SVG规范。转换后,只保留第一个起点和最后一个终点的定位信息。


-----------------------------------------------------------------------
SVG中,图元的transform属性对渐变色绘制的影响:

- SVG先按照图元的坐标数据进行渐变色渲染,然后渐变色随同图元一起进行坐标变换(应用图元的transform属性)。这意味着在AGG中实现时,插值器矩阵需要叠加图元的transform属性。

- 对于objectBoundingBox模式,其参考坐标系是图元应用transform属性之前的包围矩形。


-----------------------------------------------------------------------
在SVG中:不论是绘制填充区域,还是绘制轮廓线,对于objectBoundingBox模式下的渐变色渲染,其参考坐标系均为填充区域的包围矩形。


-----------------------------------------------------------------------
使用AGG实现objectBoundingBox模式的渐变色绘制的步骤:

1 以单位矩形为基准,设计渐变方式和参考值区间。
2 对插值器矩阵应用gradientTransform中的变换(注意按逆序),此时得到的渐变区域仍然基于单位矩形。
3 通过缩放(w,h)和平移(x0,y0),将渐变区域变换至待填充图元的包围矩形。(x0,y0,w,h)是包围矩形在绝对坐标系中的几何参数。

上述方法还存在一个问题。首先分析一下像素颜色的计算过程:

1 待填充的像素通过插值器矩阵(上述变换的逆矩阵),变换至单位矩形。
2 计算参考值,并将参考值映射至颜色区间,从而得到像素颜色。在此过程中,已变换至单位矩形的点坐标和参考值区间[d1,d2]均换算成亚像素坐标(其实就是乘以16然后取整)参与计算。

由于单位矩形的边长换算成亚像素只有16,而参考值区间又是以单位矩形为基准选取的,因此参考值区间对应的亚像素数目有限,导致映射至颜色区间后,颜色看上去不连续。

解决办法:以边长w的正方形为基准,设计渐变方式和参考值区间,gradientTransform属性中的相对长度也乘以w,然后缩放系数改为(1,h/w)。

但是在绘制SVG图元前,gradientTransform属性已经被解析为一个矩阵,如何实现“相对长度乘以w”?参考《计算机图形学 第三版》P201 公式5.42,将矩阵的平移项(第3列前两个元素)乘以w即可。


-----------------------------------------------------------------------
SVG中,objectBoundingBox模式的渐变色绘制的实现原理:

在objectBoundingBox模式下,<linearGradient>和<radialGradient>的属性参数所设定的渐变区域,是以单位矩形(边长为1)为基准,然后通过缩放(w,h)和平移(x0,y0),变换至待填充图元的包围矩形。(x0,y0,w,h)是包围矩形在绝对坐标系中的几何参数。


-----------------------------------------------------------------------
SVG中,<linearGradient>使用向量标识渐变方向。用AGG实现时,通常使用水平渐变gradient_x,以原点为渐变起始点,参考值区间为[0,向量长度],然后通过插值器矩阵的旋转、平移,变换至渐变向量的位置。

要考虑向量长度近似为0的情况:如果向量长度 < 0.5,则按实色填充,填充色取第一个渐变色。


-----------------------------------------------------------------------
关于SVG中线性渐变元素<linearGradient>的描述:

属性:
    id            元素标识
    x1, y1        渐变矢量的起点,缺省值“0, 0”
    x2, y2        渐变矢量的终点,缺省值“100%, 0”

    gradientUnits    x1 y1 x2 y2的坐标系,缺省值为“objectBoundingBox”
      - userSpaceOnUse        用户坐标系(与SVG图元使用同一个坐标系)
      - objectBoundingBox    以对象的包围矩形为参考坐标系

    spreadMethod    重复方式,默认值为“pad”
      - pad            不重复
      - repeat            对应agg::gradient_repeat_adaptor
      - reflect            对应agg::gradient_reflect_adaptor

    xlink:href        引用另外一个已定义好的渐变元素

    gradientTransform    变换矩阵,缺省值为单位阵
        与图元的transform属性类似,也是按逆序应用变换(绝对坐标系)
        用于AGG中的插值器时,矩阵还要求逆
        gradientUnits对gradientTransform有影响
          - userSpaceOnUse    坐标变换使用用户坐标系(与SVG图元使用同一个坐标系)
              在此情况下,不需要对坐标值和变换矩阵进行额外处理
  

NumPy+Pandas+Matplotlib数据可视化底层原理与实战 数据可视化不仅是图表生成,更是从原始数据到业务洞察的系统性工程。其核心依赖于NumPy的内存连续性与向量化计算、Pandas的结构化数据建模能力以及Matplotlib面向对象的视觉控制机制。理解这三者协同工作的底层原理——如NumPy dtype对内存与性能的影响、Pandas Series/DataFrame如何承载数据语义、Matplotlib Axes如何实现像素级渲染——是构建可复现、可维护、可交付图表的前提。该技术栈在资源受限环境(如2GB内存服务器)、Kaggle竞赛、教学演示及决策支持报告中 阅读详情

相关推荐

SVG渐变与图案的详细解析与应用

本文深入探讨了SVG中线性渐变和径向渐变的属性和使用方法,包括它们的坐标系统、变换、填充策略等,并对SVG图案的创建与应用提供了详细指导,包括图案的定位、尺寸、内容绘制和变换。

weixin_42581003的博客 648

agg_svg_viewer补丁包

AGG是一个开源的二维图形引擎,它提供了一个功能有限的SVG解析、渲染工具svg_viewer。我对svg_viewer做了如下改进: - 支持解析 、 元素,以及 的 rx、ry 属性(圆角矩形)。 - 支持格式为 rgb(ddd, ddd, ddd) 的颜色值 - 支持解析的width、height属性,解析后的属性值通过path_renderer::width、height、width_unit、height_unit获取 - 原来的代码对半透明属性fill-opacity、stroke-opacity的解析存在Bug:这两个属性必须位于fill、stroke的后面,否则无效。修改后的代码解决了该Bug。

angular-svg-draw:用于绘制 SVG 的 Angular 指令

绘图 用于绘制 SVG 的 Angular 指令包装器。 灵感来源: : | 用法 包括/ source /文件夹中的2个文件 svg.css svgDrawing.js 在您的应用程序中包含“svgDrawing”作为依赖项 angular.module('yourApp', ['svgDrawing']) 要使用该指令,只需在元素中添加“svg-draw” <svg svg-draw></svg> 这将以 60fps 为 0-60 帧的路径设置动画。 应用程序接口 指令的选项可以通过数据属性进行控制。 以下选项可用: 名称 类型 默认 描述 起始帧 整数 0 要开始动画的帧 结束帧 整数 60 您想要结束以 60fps 运行的动画的帧 延迟 整数 0 开始动画前的延迟(以毫秒为单位) 完全的 功能 angular.noop 动画完成后你想运行什么函数

agg 开源的、高效的2D图形库

AGG,全名:Anti-Grain Geometry,是一个开源的、高效的2D图形库。AGG的功能与GDI+的功能非常类似,但提供了比GDI+更灵活的编程接口,其产生的图形的质量也非常高,而且它是跨平台的,其宣传可以在非常多的操作系统上运行,包含在Windows、Wince、Linux台平。 agg的特点 1、支持ALPHA、GAMMA等变色处理,以及用户自定义的变色处理; 2、支持任意2D图形变换; 3、支持SVG和PostScript描述,适于网上图形生成; 4、支持高质量的图形处理,支持反走样插值等高级功能; 5、支持任意方式的惭变色处理; 6、支持所有颜色格式; 7、支持对位图的多种处理; 8、支持直线的多种处理,类似于GDI+; 9、支持GPC,即通用多边形裁剪方法; 10、支持多种字体输出,包括汉字的处理;

Unity ECS 之 Entitas 的简单介绍,插件下载、导入,和简单使用(一篇文入门搞懂ECS是什么)

Unity ECS 之 Entitas 的简单介绍,插件下载、导入,和简单使用(一篇文入门搞懂ECS是什么) 目录 Unity ECS 之 Entitas 的简单介绍,插件下载、导入,和简单使用(一篇文入门搞懂ECS是什么) 一、简单介绍 二、一些专有项简介 Entity Context Group Collector Matcher System Feature 三、注意实现 四、ECS 的下载 Github 上下载 Unity Asset Store 中下载 U...

仙魁XAN 7779

ANSYS Discovery 2023R1 保姆级教程:手把手教你玩转几何模型参数化(附避坑指南)

本文提供ANSYS Discovery 2023R1几何模型参数化的全面教程,涵盖基础环境搭建、核心操作解析及高级应用场景。重点讲解参数化建模中的常见问题与避坑方案,帮助用户高效掌握Workbench与Discovery的协同使用技巧,提升工程仿真效率。

weixin_29204205的博客 752

Unity集成抖音小游戏:从IL2CPP配置到SDK接入全流程解析

本文详细解析了使用Unity开发抖音小游戏的完整流程。从关键的IL2CPP编译后端配置、PlayerSettings设置,到StarkSDK的接入与资源优化(如AutoStreaming),再到激励视频广告、录屏分享等核心功能的代码实现,提供了从环境准备到打包上传的全方位实战指南,帮助开发者高效完成技术适配。

weixin_27943395的博客 690

STM32 HAL库 实现基于SPI模式的SD卡、TF卡FATS文件系统+模拟U盘的应用笔记

很多单片机不带SDIO接口,所以在使用SD卡时必须使用SPI模式进行读写。 想做一个基于SPI的SD卡文件系统读写SD卡上的文件,再配合USB接口做一个模拟U盘。只能利用业余时间慢慢更新,也不知道能不能坚持下去。 我会把从零开始开发一个程序需要经历的过程一一的记录下来。做成一个奶妈级的单片机开发笔记。 一、硬件简介 1.SD卡和MicroSD卡(TF卡)的区别 由下图可以很容易的看出TF卡只是比SD卡少了一个3脚Vss脚,其它的管脚顺序

KyleKuang的博客 8334

【AgentScope 2.0】01-不搭 demo,直接解剖一个生产级 Agent 平台:loser-agent 全链路地图

本文介绍生产级Agent平台loser-agent的完整请求旅程,从用户发消息到返回结果共七站:入口鉴权、灰度路由、Agent装配、模型路由、工具执行、持久化与流式响应。课程以真实源码为线索,深入剖析每一步实现逻辑,涵盖灰度发布、权限控制、HITL审批、多模态处理、状态持久化等核心能力。强调框架仅负责Agent运行时语义,平台自建管理请求生命周期中所有非框架部分,适合Java后端开发者系统掌握Agent工程化落地。

loser.with.m的博客 725

Vision 机器视觉案例 之 零件边缘缺陷检测

缺陷检测工具

机器视觉李小白的博客 1386

多摄像头场景下 ISP 的同步与调度机制实战解析

在智能手机多摄系统中,主摄、广角、长焦、微距等摄像头的协同工作能力直接决定了影像系统的体验上限。而支撑这一能力的核心之一,正是 ISP 的同步与调度机制。ISP 需要处理多个 Sensor 的输入流、统一时序、资源仲裁、并发调度,并支持在不同模式间快速切换(如预览 → 拍照 → 视频)。本文将基于 Qualcomm、MTK、HiSilicon 平台的实际架构,系统性剖析 ISP 在多摄场景下的时序控制、Pipeline 配置、Buffer 管理与故障恢复机制,并分享实战中的典型问题与调试方案。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 2347

GRSL 2026 即插即用 | Transformer篇 | DCSA:动态稀疏门控自注意力,兼顾长距离依赖与局部细节表达!

SDANet整体架构和模块Dynamic Channel Sparse Attention (DCSA):DCSA为Transformer块中的自注意力层。DCSA架构:样本级动态稀疏注意力:首次实现每个样本独立预测注意力稀疏度:通过轻量门控网络根据输入特征的复杂度自适应调整保留的通道数,简单样本使用更高稀疏度(如保留 20% 通道),复杂样本使用更低稀疏度(如保留 80% 通道),在保证精度的前提下平均计算量降低 50% 以上。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 108

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: AGG svg_viewer实现了渐变色渲染
下一篇: Qt Creator如何保存调试断点?
zhawk
博客等级 码龄23年 7粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值