AGG 组合类线段生成器

8.1 线段类设计与实现-类组合 要求在Point类基础上采用类组合的思想,设计一个线段类,如图所示,线段类包括2个点类对象,成员函数能显示该线段的起点坐标、终点坐标以及线段的长度。2个点坐标从键盘输入,线段长度通过公式计算。 在学习过封装后,我们要学会将类进行组合,如何进行组合呢? 首先我们将类区分为两种,一种是被引用的,另一种是需要引用前一类中某些数据项或者成员函数的,为了方便下面讲解,在这里我将他们分别命名为提供类和需求类 ... 阅读详情

组合类线段生成器

头文件
  1. #include <agg_span_converter.h>
类型
  1. template<class SpanGenerator, class SpanConverter>
  2. class agg::span_converter;

span_converter的作用是组合两种生成器,比如先由图案类线段生成器产生图案,然后由色彩类线段生成器产生半透明色叠加在图案上。

下面的演示代码演示了怎样组合span_image_filter_rgb_bilinear_clip和span_gradient_alpha两种生成器

演示代码,同样基于这个代码,加入下面的头文件

#include "agg_span_allocator.h"

#include "agg_span_gradient_alpha.h"

#include "agg_span_converter.h"

#include "span_image_filter_rgb_bilinear_clip.h"

 

在on_draw()方法的最后加上下面这些代码

 

agg::pixel_map pm_img;
if(pm_img.load_from_bmp("d://spheres.bmp"))
{
 // pm_img里的图案作为填充来源
 agg::rendering_buffer rbuf_img(
  pm_img.buf(),
  pm_img.width(), pm_img.height(),
  -pm_img.stride());
 agg::pixfmt_bgr24 pixf_img(rbuf_img);// 我用的bmp是24位的
 // 线段分配器
 typedef agg::span_allocator<agg::rgba8> span_allocator_type;//分配器类型
 span_allocator_type span_alloc; // span_allocator
 // 插值器
 typedef agg::span_interpolator_linear<> interpolator_type; //插值器类型
 agg::trans_affine img_mtx; // 变换矩阵
 interpolator_type ip_img(img_mtx); // 插值器

 agg::trans_affine alpha_mtx; // 变换矩阵
 interpolator_type ip_alpha(alpha_mtx); // 插值器

 // 渐变方式
 typedef agg::gradient_x gradientF_type;
 gradientF_type grF;

 typedef std::vector<agg::int8u> alphaF_type;
 alphaF_type alphaF(256);
 for(int i=0; i<256; i++) alphaF[i] = i;

 // Alpha线段生成器
 typedef agg::span_gradient_alpha<agg::rgba8,
  interpolator_type,
  gradientF_type,
  alphaF_type> alpha_span_gen_type;
 alpha_span_gen_type alpha_span_gen(ip_alpha,grF,alphaF,0,150);

 // 图案线段生成器
 typedef agg::span_image_filter_rgb_bilinear_clip<agg::pixfmt_bgr24,
  interpolator_type > pic_span_gen_type;
 pic_span_gen_type pic_span_gen(pixf_img, agg::rgba(0,1,0), ip_img);

 // 使用span_converter组合成新的线段生成器
 typedef agg::span_converter<pic_span_gen_type, alpha_span_gen_type> span_gen_type;
 span_gen_type span_gen(pic_span_gen,alpha_span_gen);

 // 组合成渲染器
 agg::renderer_scanline_aa<
  renderer_base_type,
  span_allocator_type,
  span_gen_type
 > my_renderer(renb, span_alloc, span_gen);
 // 插值器的矩阵变换
 img_mtx.scale(0.5);
 img_mtx.translate(40,40);
 img_mtx.invert(); //注意这里

 // 用我们的渲染器画圆
 ras.add_path(ccell);
 agg::render_scanlines(ras,sl,my_renderer);
}

显示效果

<<待续>>

作者:毛毛 来源:www.cppprog.com

 

MFC中使用agg绘制直线 <br />void CmfcaggView::OnDraw(CDC* pDC) { CmfcaggDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; RECT rt; ::GetClientRect(m_hWnd, &rt); HDC hdc = ::GetDC(m_hWnd); int width = rt.right - rt.left; i 阅读详情

相关推荐

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

河南洛阳 祝小鹰 2015-07-07 接触AGG一年多,积累了一些心得体会。现在贴出来与大家分享。 注1:学习笔记按记录时间的逆序排列。 注2:当初学习AGG的目的是为了绘制SVG图形文件,因此夹杂了一些SVG的内容。 注3:早期的笔记由于刚接触AGG,可能存在一些错误。 例程和库文件下载:http://pan.baidu.com/s/1o6OhqMQ ---------

zhawk的专栏 2518

【渲染引擎】agg画线介绍

对于agg的字体进行了一个很简单的介绍,下面就再对agg的画线进行一个简单的说明。 首先对于画线来说,有几种线条比如普通线, 虚实线,点阵状的线条。agg对于每种线条都有支持。另外对于线条的起始的结束样式也有几种,这个属性一般都是以linecap来标识。只有绘制较宽线段时,它才有效。这个属性的合法值如下表所示。默认值是:”butt”。 “butt” 这个默认值指定了线段应该没有线帽。线条的末点是

zwan0518的专栏 1880

通过point类生成line类,使用类模板

本设计题目的任务是使用Point类产生Line类。分别通过组合类及派生类两种方法实现,并要求分别给出使用类模板实现的程序。

AGG第五课 RGB颜色定义

混合器的存在是为了适应不同平台、不同需求下的不同像素格式。混合器有三种:agg::rgba,agg::rgba8和agg::rgba16,都是用来指定颜色的,rgba每个通道储存为double,rgba8为unsigned char,rgba16为int或long int;混合器起到的作用就像Win32API里的RGB和COLORREF宏。针对agg::rgba特别说...

weixin_33912445的博客 229

Uniapp+Vue3+Monorepo:如何优化你的前端开发流程(附完整配置代码)

本文详细介绍了如何利用Uniapp+Vue3+Monorepo技术栈优化前端开发流程,提升代码可维护性和团队协作效率。通过Monorepo架构实现依赖管理智能化、代码复用最大化和构建流程统一化,结合完整配置代码和实战指南,帮助开发者快速构建高性能跨端应用。

weixin_29011993的博客 453

无人机核心部件解析:从机架到飞控的全面指南

本文全面解析无人机的核心部件,从机架材质选择到飞控系统调参,提供专业指南。重点介绍碳纤维机架、无刷电机搭配、锂聚合物电池管理及飞控传感器配置,帮助读者掌握无人机组装与优化的关键技术,适用于航拍、测绘、农业植保等多种应用场景。

weixin_30872499的博客 467

AGG 色彩类线段生成器

色彩类线段生成器头文件#include #include #include #include #include 类型templateclass ColorT>     class agg::span_solid; templateclass ColorT, class Interpolator,

bitasd的专栏 1411

简单说说Python中的pip如何换源

【安装包】:pip install 【升级包】:pip install --upgrade 【卸载包】:pip uninstall 【查看已安装的包】:pip list【搜索包】:pip search (注意:pip search功能在pip 10.0.0之后被弃用,建议使用其他方式搜索包,如访问PyPI官网或使用其他搜索引擎)

一捌柒的博客 2667

(转)用AGG实现高质量图形输出(三)

线段生成器(Span Generator) 我们前面举的例子使用的都是简单的单一实色,如蓝色的圆、黑色的线等。这是因为在例子里我们一直使用renderer_scanline_aa_solid或render_scanlines_aa_solid。 在上篇文章的渲染器一节中除了renderer_scanline_aa_solid外,还提到有一个renderer_scanline_aa,这里再写一遍它的...

weixin_30371469的博客 259

Ubuntu操作系统等保测评指南

Ubuntu操作系统等保测评指南

qq_40181198的博客 7025

RAP 值帮助实战:用 CDS 注解把 Fiori Elements 的输入体验做得又快又准

本文系统介绍了如何在SAP RAP应用中实现高效的值帮助(Value Help)功能。通过复用标准CDS View和自定义View Entity,开发者可以快速为字段添加弹窗选择、搜索和下拉框功能。文章详细讲解了三种核心实现方式:复用标准值帮助CDS View实现快速集成;构建自定义View Entity支持企业特定编码;利用搜索注解(@Search)和下拉框注解(@ObjectModel)优化用户体验。特别强调了文本显示、模糊搜索和小结果集下拉等实用技巧,并提供了可直接复用的国家代码值帮助示例。这些方法能

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 6465

类的组合 计算线段长度

#include&lt;iostream&gt; #include&lt;math.h&gt; using namespace std; class Point { private:     int x,y; public:     Point(int xx,int yy)     {x=xx;y=yy;}     int getx()     {return x;}     int gety()...

赖卓成的博客 1920

GEE案例:计算区域生态总体脆弱性分析

计算区域生态总体脆弱性分析需要考虑多个指标和因素。下面是一个基本的方法:选择指标:选择一组能够反映区域生态系统脆弱性的指标。这些指标可以包括生物多样性指数、森林覆盖率、湿地保护率、土地退化程度等。为每个指标分配权重:为了使得各指标在计算中的重要性相对均衡,可以为每个指标分配一个权重。权重可以根据各指标的重要性和可利用的数据进行确定。数据收集和处理:收集每个指标的数据,并对其进行处理,确保数据的准确性和一致性。如果有需要,可以对数据进行归一化处理。计算指标值:根据收集的数据和权重,计算每个指标的值。

此星光明博客 465

类的组合

类的组合 类的组合是指:类中的成员数据是另一个类的对象。 通过类的组合可以在已有的抽象的基础上实现更复杂的抽象。 例如:在定义了点类(Point)以后,我们希望通过两个点定义一点线段,甚至还希望通过三个点定义一个三角形,或四边形等等。 类组合中的难点是关于它的构造函数设计问题。组合类中有其他类的对象作为成员,这些对象成员也成为类的内嵌对象成员。 组合类在创建对象时,它的各个内嵌对象将首先被自动创...

qq_42932834的博客 1万+

彻底摆脱文献只能读开头的痛苦!这款文献检索神器真能帮你跨越文献付费限制(附实操演示)

大家是不是有过这样的经历,好不容易通过关键词搜到了和自己主题高度相关的文献,想要快速获取文献信息,推进研究进度,却又因为付费或者需订阅才能下载PDF,而被劝退。粘贴完成后,点击搜索,搜索结果页面会显示这篇文献的相关信息,有的文献有“下载PDF”,有的文献则只有“求助PDF”,不管是哪种情况,直接点击进入;我这里点击的是“下载PDF”,接着它会跳转页面。我用 Book 学术下载过不少付费文献,实测下来 80% 左右的文献,都能通过它的求助方式成功获取到,只有少部分文献等待的时间会稍微久一些或者没办法下载。

qq_64378896的博客 163

SAP和Oracle EBS作为全球顶级的ERP系统,在中国市场深耕数十年,尤其是在大型国企、央企和跨国企业中,已经形成了强大的用户习惯和“舒适区”依赖

国产ERP替代国际系统的关键挑战在于打破用户对SAP/Oracle的操作习惯和心理依赖。需采取多维策略:战略上明确价值主张、分阶段实施;产品上优化用户体验、确保数据迁移;实施上加强情景化培训、流程再造。成功替代70%取决于变革管理,需将"被动替换"转为"主动升级",让用户在新系统中建立更优的舒适区。

金牌架构师 383

Point类组合方式生成Line类(一)

组合类的概念:一个类的成员是另一个类的对象,如下练习中Line类的成员a,b是Point类的对象。Point在类Line中创建对象a,b过程中,会调用构造函数对其进行初始化,而像类Line中Point对象的创建不含参数方式,也就需要Point类中含有不含参数的构造函数! #include using namespace std; class Point { public: Point

逗比熊二的大哥 5639

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

AGG 渲染器(Renderers)

Renderers 渲染器渲染器负责表现扫描线Scanline中的每个线段(span)。在渲染器之前,AGG图形中的线段是没有颜色值的,只是位置、长度和 覆盖率(透明度)。渲染器赋于线段色彩,最终成为一幅完整的图像。渲 染器被分成底中高三层。其中底层负责像素包装,由PixelFormat Renderer实现;中层是基础层,在PixelFormat Renderer的基础上提供更多方法

bitasd的专栏 1677

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

AGG svg_viewer实现了渐变色渲染

花了差不多两个月的时间,终于实现了渐变色渲染,即SVG文件的和。 渐变色渲染 用渐变色绘制的标记点 此外还有一些小改进,详情见库文件的说明。 例程和库文件下载:http://pan.baidu.com/s/1o6OhqMQ

zhawk的专栏 1023

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Agg图形库学习笔记-实现任意方向圆角渐变矩形

直接贴代码了.... View Code 1 #include <stdio.h> 2 #include "agg_basics.h" 3 #include "agg_rendering_buffer.h" 4 #include "agg_rasterizer_scanline_aa.h" 5 #include "agg_scanline_...

weixin_30746117的博客 639

类的组合,线段(Line)类

我们使用一个类来描述线段,使用point类对象来表示端点,LIne类具有计算线段长度的功能,在构造函数中实现。源程序如下。 #include<iostream> #include<cmath> using namespace std; class point { private:int x; int y; public: point(int xx, int yy) { x = xx; y = yy; } int GetX(); int GetY()

qq_47179303的博客 3725

AGG入门

AGG入门   一、配置开发环境   AGG入门(一) - 配置开发环境 AGG是一个高效的、高质量的、开源的矢量图形库,类似的有:GTK+的Cairo,Microsoft的GDI+。在三者中,AGG的性能是最高的(不讨论Skia和Direct2D,他们有OGL和DX的硬件加速,绘图速度根本不是一个档次的)。让我们细数一下他的优缺点: 优点:效率高,质量高(有反锯齿),

yinyhy的专栏 1万+

1.7 qt.go 画线样式

02_画线 http://doc.qt.io/qt-5/qt.html#GlobalColor-enum有些全局的变量如 Qt::ImhHiddenText Qt::Key_Escape Qt::white 在kitech\qt.go\qtcore\qnamespace.go Qt Namespace 中定义了很多的全局变量值,咱们可以在qnamespace.go 找到对应的名称 如上例子中in...

飞剑神 617

Agg vs. Cairo 二维绘图引擎之比较和选择

<br />Agg vs. Cairo 二维绘图引擎之比较和选择<br />cheungmine<br />当今时代对于作为二维图形软件开发者, 是幸运的。因为除了Windows GDI/GDI+之外,我们还有很多其他的选择。而且这些选择除了能跨平台之外,性能上与原始GDI/GDI+相比,都不逊色。<br /><br /> 如果不考虑绘图的效果,使用Win32 GDI函数直接绘图的效率大约是同样的GDI Plus的10倍以上。为了反走样的美观,只有牺牲效率了。老式的程序还在使用GDI绘图,不是这些程序不想

恒 1万+
上一篇: AGG 色彩类线段生成器
下一篇: AGG的字符输出
bitasd
博客等级 码龄19年 11粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值