AGG 线段生成器(Span Generator)

D3形状(一):直线生成器 在绘制SVG的图形上,D3并不直接在SVG画布上生成图形,而是根据输入的数据产生相关的SVG路径信息,所以,D3所有的形状并非是可见的SVG图形,而是一系列的SVG图形生成器,或者说是一系列的SVG图形生成函数。 阅读详情

线段生成器(Span Generator)

我们前面举的例子使用的都是简单的单一实色,如蓝色的圆、黑色的线等。这是因为在例子里我们一直使用renderer_scanline_aa_solid或render_scanlines_aa_solid。

在上篇文章(http://www.cppprog.com/2009/0821/150.html)的渲染器一节中除了renderer_scanline_aa_solid外,还提到有一个renderer_scanline_aa,这里再写一遍它的声明:

  1. template<class BaseRenderer, class SpanAllocator, class SpanGenerator>
  2.     class renderer_scanline_aa;

另外,还有一个函数版本:

  1. template<class Rasterizer, class Scanline, class BaseRenderer,
  2.          class SpanAllocator, class SpanGenerator>
  3. void render_scanlines_aa(Rasterizer& ras, Scanline& sl, BaseRenderer& ren,
  4.                           SpanAllocator& alloc, SpanGenerator& span_gen);

renderer_scanline_aa (还有一个兄弟版本renderer_scanline_bin)可以按指定的图案或不同的颜色(如渐变)填充顶点源里的多边形。其中的模板参数 SpanAllocator用于准备span,我们直接使用agg::span_allocator就行。这里的SpanGenerator就是本节要说的线段生成器,它决定了最终用什么东西填到rendering_buffer里。

线段生成器品种很多,常用的在致可以分成图案类和色彩类两大部分:图案类线段生成器使用已有图像作为span来源;色彩类线段生成器使用指定的颜色作为span来源。

图案类线段生成器

头文件
  1. #include <agg_span_image_filter_gray.h>
  2. #include <agg_span_image_filter_rgb.h>
  3. #include <agg_span_image_filter_rgba.h>
  4. #include <agg_span_pattern_gray.h>
  5. #include <agg_span_pattern_rgb.h>
  6. #include <agg_span_pattern_rgba.h>
类型
  1. template<class Source, class Interpolator>
  2.      span_image_filter_[gray|rgb|rgba]
  3. template<class Source, class Interpolator>
  4.      span_image_filter_[gray|rgb|rgba]_2x2
  5. template<class Source, class Interpolator>
  6.      span_image_filter_[gray|rgb|rgba]_bilinear
  7. template<class Source, class Interpolator>
  8.      span_image_filter_[gray|rgb|rgba]_bilinear_clip
  9. template<class Source, class Interpolator>
  10.      span_image_filter_[gray|rgb|rgba]_nn
  11. template<class Source, class Interpolator>
  12.      span_image_resample_[gray|rgb|rgba]
  13. template<class Source>
  14.      span_image_resample_[gray|rgb|rgba]_affine
  15. template<class Source>
  16.     class agg::span_pattern_[gray|rgb|rgba]

上面这些线段生成器类的模板参数都比较相似:Source用于指定图像来源,可以是PixelFormat renderer或agg::image_accessor_clip(由不同的线段生成器类决定);Interpolator是一种插值器,用于填充图像间隙。我们先写一段示例代码,先看一下线段生成器的作用,也为后面的各种实验做准备。

示例代码,使用span_image_filter_rgb_bilinear_clip

还是基于这个代码(http://www.cppprog.com/2009/0816/146.html),加入下面的头文件

  1. #include <platform/win32/agg_win32_bmp.h>
  2. #include "agg_span_allocator.h"
  3. #include "agg_span_image_filter_rgb.h"

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

  1. ...
  2. // 以图像填充
  3. agg::pixel_map pm_img;
  4. if(pm_img.load_from_bmp("d://spheres.bmp"))
  5. {
  6.     // pm_img里的图案作为填充来源
  7.      agg::rendering_buffer rbuf_img(
  8.          pm_img.buf(),
  9.          pm_img.width(), pm_img.height(),
  10.          -pm_img.stride());
  11.      agg::pixfmt_bgr24 pixf_img(rbuf_img);// 我用的bmp是24位的
  12.     // 线段分配器
  13.     typedef agg::span_allocator<agg::rgba8> span_allocator_type;//分配器类型
  14.      span_allocator_type span_alloc; // span_allocator
  15.     // 插值器
  16.     typedef agg::span_interpolator_linear<> interpolator_type; //插值器类型
  17.      agg::trans_affine img_mtx; // 变换矩阵
  18.      interpolator_type ip(img_mtx); // 插值器
  19.     // 线段生成器
  20.     typedef agg::span_image_filter_rgb_bilinear_clip<agg::pixfmt_bgr24,
  21.          interpolator_type > span_gen_type; // 这个就是Span Generator
  22.         
  23.      span_gen_type span_gen(pixf_img, agg::rgba(0,1,0), ip);
  24.     // 组合成渲染器
  25.      agg::renderer_scanline_aa<
  26.          renderer_base_type,
  27.          span_allocator_type,
  28.          span_gen_type
  29.      > my_renderer(renb, span_alloc, span_gen);
  30.     // 插值器的矩阵变换
  31.      img_mtx.scale(0.5);
  32.      img_mtx.translate(40,40);
  33.      img_mtx.invert(); //注意这里
  34.     // 用我们的渲染器画圆
  35.      ras.add_path(ell);
  36.      agg::render_scanlines(ras,sl,my_renderer);
  37. }

其中的d://spheres.bmp(下载)是我预先放在D盘里的24位bmp图像,作为填充的来源。

显示效果:

  1. 在第19行的span_gen_type之前,所有的事情都在为定义这个线段生成器做准备。
  2. 首先是用pixel_map读取bmp文件,然后生成rendering_buffer和pixfmt_bgr24作为这个线段生成器的"Source"。
  3. 然后是线段分配器,这个没什么特殊要求的话用span_allocator就可以了。
  4. 接着是插值器类型,插值器也有几个类型(后面会介绍),它的构造函数需要一个变换矩阵对象,于是我们得为它装备一个。
  5. 现在,终于可以组合成一个我们的线段生成器了。这里使用的是span_image_filter_rgb_bilinear_clip,它的Source是PixelFormat Renderer,如本例的pixfmt_bgr24。
  6. span_image_filter_rgb_bilinear_clip的构造函数有三个参数,分别是Source对象,填充来源范围之外的颜色和插值器对象。
  7. 我们可以改变插值器的矩阵来变换填充图像,象这里的img_mtx.scale(0.5)和img_mtx.translate(40,40)。要注意的是,插值器的矩阵运算是从目标位置向源位置计算的(即根据目标位置变换得到对应的填充源位置),所以想对源图像变换的话,要记得最后调用矩阵的invert()方法取反。
  8. 最后,画圆。由于ell是ellipse对象,没有被conv_stroke转换的ellipse对象是实心的(多边形而不是多义线),于是填充之。

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

 

java写的图片生成器(带线条和文字) 这个程序主要是用来生成一张图片,同时在图片上还可以划任意条不用大小,不同颜色的线条,此外,用户还可以在图片上打印自己想打印的任何字,并且字可以改变大小,字体和颜色,稍加修改的话可以做成一个防伪图片生成程序。 立即下载

相关推荐

3d_map_generator_terrain_v1.4.1.rar

PS中用来制作三维地形的插件,成图效果惊人。利用一张灰度图,能构建出地形,并能在上面增加建筑等标识。用于ps2017及以上设计。补充了keys.reg

<span>加单下划线和双划线

1:下单划线   2:下双划线

wang772972337的博客 1万+

使用DeepSeek、MCP和AKShare实现智能金融问答系统技术方案

DeepSeek是由深度求索公司开发的大规模语言模型,最新版本DeepSeek-V3采用混合专家(MoE)架构,拥有671B参数,激活37B参数,在多项基准测试中表现优异3。要使用DeepSeek的API服务:访问DeepSeek平台注册账号获取API Key(形如AKShare是基于Python的金融数据接口库,提供股票、基金、期货、宏观经济等领域的海量数据。主要特点包括:免费开源,数据源丰富支持多种数据格式(DataFrame/JSON)持续更新维护安装命令。

Kin 3172

D3.js(三):线段生成器、区域生成器、弧生成器、符号生成器、弦生成器、对角线生成器、饼图、弦图

【代码】D3.js(三):线段生成器、区域生成器、弧生成器、符号生成器、弦生成器、对角线生成器、饼图、弦图。

You瞧谁不起 - 道不尽世间的沧桑,诉不完人生的悲凉 891

【HCIE】FRR+BFD+OSPF与BGP联动

FRR+BFD+OSPF与BGP联动

Wenrs的博客 1996

玩转肺癌目标检测数据集Lung-PET-CT-Dx ——①从TCIA获取影像数据集

该目标检测公共数据集源自 The Cancer Imaging Archive(TCIA),是肿瘤研究方面的著名的医学影像公开数据库。 数据以 DICOM 格式存储,由肺癌受试者的 CT 和 PET-CT DICOM 图像组成。

takedachia的博客 1万+

AGG 色彩类线段生成器

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

bitasd的专栏 1411

海康威视Web3.0插件实战:快速部署摄像头实时预览方案

本文详细介绍了海康威视Web3.0插件的实战应用,包括快速部署摄像头实时预览方案的完整流程。从插件下载安装到摄像头连接配置,再到浏览器兼容性解决方案,帮助开发者和IT人员高效实现网页端监控功能。特别针对预览功能调优和多摄像头管理等高级应用提供了实用技巧。

weixin_29266679的博客 346

AGG学习之八----使用图案填充

装载bitmap文件,使用bitmap图案构建span生成器,对面进行填充。代码如下: #include "platform/agg_platform_support.h" #include "agg_basics.h" #include "agg_rendering_buffer.h" #include "agg_pixfmt_rgb.h" #include "agg_alpha_mask_u

ErikLiu的专栏 2468

CMOS图像传感器系列--(四)HDR之LOFIC技术

CMOS图像传感器HDR技术之LOFIC解析 LOFIC(横向溢出积分电容器)技术是当前高动态范围成像的重要方案,通过在像素光电二极管旁设置高密度电容器收集溢出电荷,有效保留高光细节。该技术采用特殊像素结构,通过skim level触发电荷转移,实现单帧HDR成像。然而LOFIC存在显著局限性:高光区域噪声明显且难以消除,动态范围拓展不均衡(主要优化亮部),需复杂MIM工艺导致成本升高。为应对挑战,行业提出混合方案(如结合DCG技术)和工艺改进方向。OmniVision最新车载传感器OX08D10就采用了L

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 5788

Krylov子空间与Arnoldi过程

一、应用背景 Krylov子空间方法是模型降阶(MOR)的一种,Krylov 子空间方法就是在Krylov子空间中寻找近似解。 二、Krylov子空间 n是原始矩阵的维度,m为降阶后矩阵的维度,通常m<<n。 三、Arnoldi 过程: 计算Km 的一组正交 对应上述MGS过程的python代码: import numpy as np def arnoldi_itera...

保持写作习惯,完成知识沉淀 6001

地图点击区域高亮 vue_像素化地图生成器(Pixel Map Generator)

Pixel Map Generator是一种简单的线上地图像素化生成器,美观大方的界面为用户带来直观出彩的视觉冲击。Pixel Map Generator可获取地图,对地图进行解释说明,根据需求添加坐标和线条注记,并对不同的地区设置不同配色,最重要的是能够将地图像素化,无论作为行程规划还是作为普通地图展示,其效果都非常好。Pixel Map GeneratorPixel Map Gene...

weixin_39943000的博客 4621

破解现代反爬虫:JS加密、OB混淆与CSS反爬的实战攻防分析

摘要: 随着反爬技术的升级,JS加密、OB混淆和CSS反爬成为主流防护手段,阻碍传统爬虫获取数据。本文解析了这些技术的工作原理,并提出破解策略:通过模拟浏览器(如Selenium、Puppeteer)执行动态JS,逆向混淆代码,以及利用开发者工具突破CSS隐藏。针对复杂防护,开发者需结合技术分析与工具应用,如API接口抓取、动态渲染破解等,以应对不断演进的反爬机制。未来,爬虫攻防将持续升级,需保持技术敏锐性。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1644

几个比较好的国外网站

http://aspnet.4guysfromrolla.com/ C#http://www.codeproject.com/

459594486随笔 72万+

告别 GENERATE_SUBPOOL_DIR_FULL:用 RTTC 平替 CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE 的一套更稳方案

文章摘要:本文探讨了ABAP开发中动态内表的创建问题,重点分析了使用CL_ALV_TABLE_CREATE方法可能遇到的GENERATE_SUBPOOL_DIR_FULL错误。该错误源于临时subroutine pool的36次创建上限,常在批量处理或频繁调用时出现。文章提出基于RTTC技术的替代方案ZCL_ALV_TABLE_CREATE_RTTC,通过运行时类型服务直接创建动态内表,无需生成临时代码,从而规避了资源限制。该方法保持接口兼容性,只需简单替换类名即可实现无缝迁移,是解决动态表创建瓶颈的有效方

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

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

盘点全网哪些超乎想象的高科技工具?有哪些免费开源的最新AI智能工具?短视频自媒体运营套装?

盘点全网哪些超乎想象的高科技工具?有哪些免费开源的最新AI智能工具?短视频自媒体运营套装?

代码讲故事 2028

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

d3 线段生成器

下定决心,好好过一天 这里我的d3是v7版本,框架使用的是vue框架。可以只看methods中写的代码即可 源代码 <template> <div id="LineChartsD3" width=600 height=600> </div> </template> <script> import * as d3 from "d3" export default { name:"LineChartsD3", mount.

give it a try 263

OV9734 DATASHEET,完整规格书

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

我的第一个网站“爱汉服”

网站CSS样式: body { margin: 0; padding: 0; background: #372412 url(img01.gif) repeat-x; font-size: 13px; color: #FFFFFF; } body, th, td, input, textarea, select, option { font-fa...

zkbx93207的博客 24万+

网站推荐一波,这7个都不常见!但确实好玩又实用!!

「 静静地做自己,让世界发现你」科技毒瘤君将不定时分享优质工具,大家可以把科技毒瘤君公众号设为★星标,第一时间获取最新推送,以防错过优质内容。1.UpscaylUpscayl 是一款免费开源的图片无损放大工具,支持 Windows、Mac 和 Linux 系统。它内置了多款 AI 模型,可以对低分辨率、模糊图片进行修复,并放大 4~8 倍,变成高清大图。链接直达:https://www.ups...

科技毒瘤君 1039

像素地图生成工具帮助你快速生成精美地图

  在项目中,你可能会需要用到地图以更直观的展示和地域相关的一些信息。现在,借助AmCharts 新工具——Pixel Map Generator,您可以在短短几分钟内创建出令人惊叹的视觉地图。并可以集成到您的网站,演示文稿,甚至可以使用它们打印小册子。 马上去体验一下   您可能感兴趣的相关文章 网站开发中很有用的 jQuery 效果【附源码】 分享35个让人...

weixin_38166557的博客 413

在线世界地图生成器 pixelmap可调色

在线世界地图生成器 https://pixelmap.amcharts.com/ 可编辑背景颜色/ 国家颜色 可切换 世界 地图 / 国家地图 可切换 像素地图

sunshineTing2的博客 5万+

这几个软件你可能没听过,但真的好用到爆!

1、Listary第一款神器叫Listary,这是一款文件搜索的工具。电脑上文件一多,总是有些文件不知道放哪了,虽然电脑也自带文件搜索,但很慢;提起文件搜索工具,好多人应该还知道一个软件,叫everything,搜索的速度也很快。与Everything相比,我更喜欢Listary,因为它不需要单独的打开软件。使用Listary,只需要双击ctrl键即可弹出检索框,输入文字即可检索相关的内容,非常快捷

xustart7720的博客 3975

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

AGG 渲染器(Renderers)

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

bitasd的专栏 1677
上一篇: AGG 渲染缓存(Rendering Buffer)
下一篇: AGG 插值器(Interpolator)
bitasd
博客等级 码龄19年 11粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值