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

PDF与OFD电子发票解析技术实战:从格式转换到精准识别

本文深入探讨了PDF与OFD电子发票解析技术的实战应用,从格式转换到精准识别,提供了全面的解决方案。通过OFD转PDF技术、动态定位算法和多重校验机制,显著提升电子发票识别效率与准确率,助力企业财务数字化转型。

weixin_42565652的博客 164

5分钟搞定三网话费余额查询:手把手教你用PHP+HTML搭建查询系统(含API调用避坑指南)

本文详细介绍了如何使用PHP+HTML快速搭建三网话费余额查询系统,涵盖API调用避坑指南、前端UI设计及性能优化。通过统一处理移动、电信、联通三大运营商接口差异,实现高可用查询功能,并提供安全防护与生产部署建议,帮助开发者高效构建稳定可靠的话费查询工具。

weixin_29016833的博客 259

AGG 色彩类线段生成器

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

bitasd的专栏 1411

Allegro老鸟的20年效率秘籍:用YepEda Skill脚本实现PCB设计全流程自动化

本文分享了Allegro资深工程师20年效率秘籍,通过YepEda Skill脚本实现PCB设计全流程自动化。从封装建库到规则配置,再到DFM审核,YepEda Skill大幅提升设计效率,每天节省至少4小时重复劳动。文章详细解析了自动化工具链的核心功能,并提供了实战技巧和量化对比数据。

weixin_42546392的博客 238

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

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

weixin_30371469的博客 259

GD-Link离线烧录全攻略:从配置到一键下载的保姆级教程

本文详细介绍了GD-Link离线烧录的全流程,从硬件准备到软件配置,再到一键下载的实战技巧。通过保姆级教程,帮助工程师快速掌握国产MCU的离线烧录技术,适用于产线批量烧录和现场设备维护等场景,显著提升工作效率。

ww90123的博客 649

华为硬件工程师笔试题

1、基尔霍夫定理的内容是什么?(仕兰微电子)   基尔霍夫定理包括电流定律和电压定律。   电流定律(KCL):在集总电路中,任何时刻,对任一结点,所有流出结点的支路电流的代数和恒等于零。   电压定律(KVL):在集总电路中,任何时刻,沿任一回路,所有支路电压的代数和恒等于零。   2、平板电容公式(C=εS/4πkd)。(未知)   3、最基本的如三极管曲线特性。(未知)   4、描述反馈电路...

weixin_33717117的博客 2万+

类的组合 计算线段长度

#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

OV5645摄像头原理图设计,已量产

在嵌入式视觉项目里,摄像头小板真正决定量产稳定性的,往往不是把传感器接出来这件事本身,而是电源域有没有拆清、参考时钟够不够干净、主板调试时有没有留出可落地的接口。ATK-MC5645 这张原理图的价值,就在于它没有把 OV5645 裸接到一排连接器上,而是把 AFVDD_2V8、DOVDD_1V8、DVDD_1V5、24MHz 时钟和 MIPI/控制信号都收敛在一块独立模组上。

不脱发的程序猿 329

类的组合

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

qq_42932834的博客 1万+

SAP特殊库存全解析:供应商寄售、客户寄售、分包与项目库存说明

客户寄售库存(Customer Consignment)是企业将物料存放于客户处,客户实际领用后才确认销售收入。这种模式能缩短交货周期、提高客户满意度,但需严格跟踪寄售库存的数量与状态。

我小时候很黑的博客 820

基于 ESP32 的分布式光伏微电网智能监控系统设计与实现

设备 / 模块连接 ESP32 引脚备注I2C 总线(SDA)GPIO21所有 I2C 设备共用I2C 总线(SCL)GPIO22所有 I2C 设备共用DS18B20(单总线)GPIO18单总线通信,需外接 4.7K 上拉电阻有源蜂鸣器GPIO19低电平触发,串联 100Ω 限流电阻ESP32 供电5V/GND由 LM2596 输出 5V 供电,或直接 USB 供电(调试阶段)INA219(光伏)光伏阵列正负极接 INA219 的 VIN+/VIN-

weixin_42300449的博客 303

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

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

逗比熊二的大哥 5639

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

AGG 渲染器(Renderers)

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

bitasd的专栏 1677

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

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

AGG svg_viewer实现了渐变色渲染

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

zhawk的专栏 1023

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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、付费专栏及课程。

余额充值