AGG第三十六课 gsv_text_outline 渲染环绕的字符

agg::rendering_buffer &rbuf = rbuf_window();

agg::pixfmt_bgr24 pixf(rbuf);

typedef agg::renderer_base<agg::pixfmt_bgr24> renderer_base_type;

renderer_base_type renb(pixf);

typedef agg::renderer_scanline_bin_solid<renderer_base_type> renderder_scanline_type;

renderder_scanline_type rensl(renb);

agg::rasterizer_scanline_aa<> ras;

agg::scanline_u8 sl;

ras.reset();

renb.clear(agg::rgba8(255,255,255));

agg::ellipse ell(400, 100, 100, 100);

agg::conv_stroke<agg::ellipse> stroke(ell);

ras.add_path(stroke);

agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255, 0, 0));

ras.reset();

agg::gsv_text txt;

agg::trans_single_path transPath;

transPath.add_path(ell);

agg::gsv_text_outline<agg::trans_single_path> txtOutLine(txt, transPath);

txt.flip(true);

txt.size(10);

txt.start_point(100, -15);

txt.space(5);//字符之间的间距

txt.text("http://fengyuzaitu.blog.51cto.com");

ras.add_path(txtOutLine);

agg::render_scanlines_aa_solid(ras,sl,renb,agg::rgba8(255, 0, 0));

ras.reset();

注意:

1 start_point指定的方向不再是真实的屏幕坐标,而是相对于顶点源的起始渲染坐标,当前渲染的椭圆是从椭圆的最右边的点,顺时针开始渲染,第一个参数可以理解为在渲染的弧线上距离起点多远的路程之后开始渲染字符,其中trans_single_path提供了total_length计算路径的长度,可以方便部署每一个字符所在的位置(相对于起点),第二个参数是指定字符偏离路径的宽度,正负数值分别是在内测还是外侧进行偏离

时间: 2024-10-17 01:10:17

AGG第三十六课 gsv_text_outline 渲染环绕的字符的相关文章

AGG第三十五课 gsv_text 渲染ASCII字符

代码 agg::rendering_buffer &rbuf = rbuf_window(); agg::pixfmt_bgr24 pixf(rbuf); typedef agg::renderer_base<agg::pixfmt_bgr24> renderer_base_type; renderer_base_type renb(pixf); typedef agg::renderer_scanline_bin_solid<renderer_base_type> ren

NeHe OpenGL教程 第三十六课:从渲染到纹理

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十六课:从渲染到纹理 放射模糊和渲染到纹理: 如何实现放射状的滤镜效果呢,看上去很难,其实很简单.把渲染得图像作为纹理提取出来,在利用OpenGL本身自带的纹理过滤,就能实现这种效果,不信,你试试. 嗨,我是Dario Corn

2018-08-24 第三十六课

第三十六课 非关系统型数据库-mangodb 目录 二十四 mongodb介绍 二十五 mongodb安装 二十六 连接mongodb 二十七 mongodb用户管理 二十八 mongodb创建集合.数据管理 二十九 php的mongodb扩展 三十 php的mongo扩展 三十一 mongodb副本集介绍 三十二 mongodb副本集搭建 三十三 mongodb副本集测试 三十四 mongodb分片介绍 三十五 mongodb分片搭建 三十六 mongodb分片测试 三十七 mongodb备份

AGG第三十二课 renderer_outline_aa更快的渲染线段算法

留给:曾经在校园奔跑时候,摔破膝盖,擦伤手掌的孩子! 1 前言 本章提供了采用新的线段渲染算法的例子,相比于已经实现的stroke管道算法,平均提高了2倍的速度,最好的情况下是2.6倍加速度.当然这种算法应用在细线上速度才会快,最好是小于2个像素. 在其他的章节中会跟conv_stroke进行效率的对比.同样的避免不了引入更多的限制,这一点可以在下面了解到.多说一句:conv_stroke是最昂贵的转换器. The rasterizer itself works much faster, bes

AGG第三十四课 stroke_aa和outline_aa渲染线段效率对比

1 渲染代码 void TestStrokeAAPerformance() { agg::rendering_buffer &rbuf = rbuf_window(); agg::pixfmt_bgr24 pixf(rbuf); typedef agg::renderer_base<agg::pixfmt_bgr24> renderer_base_type; renderer_base_type renb(pixf); typedef agg::renderer_scanline_aa

AGG第三十九课 rasterizer_scanline_aa画线函数疑惑

头文件 #include<agg_rasterizer_scanline_aa.h> 类型 template<class Clip =rasterizer_sl_clip_int> class rasterizer_scanline_aa 成员函数 void add_path(VertexSource&vs,unsigned path_id=0)加入顶点源 void reset() 清空上一次的渲染缓存数据,每次调用add_path函数之前都需要执行该操作 其中也提供了简单

第三十六课、文本编辑器中的功能交互

一 .判断未保存的数据 1.QPlainTextEdit能够触发与编辑功能相关的信号 2.解决方案 (1).定义槽函数void onTextChanged() (2).映射textChanged()到槽函数 (3).定义成员变量bool m_isTextChanged = false; (4).当文本框内容发生改变时, m_isTextChanged = true; (5).当m_isTextChanged 为真时,则保存数据 二.文本编辑器的持续开发 1.文件打开操作 2.文件新建操作 #if

第三十六课:Ajax详解2

本课主要教大家如何书写一个完整的ajax模块,讲解的代码主要跟ajax有关,而jQuery的ajax模块添加了Deferred异步编程的机制,因此对ajax的理解难度增大,还是忽略掉.但是我要讲解的代码跟jQuery的ajax模块思路是一样的,只是没有加入Deferred异步编程的思想,这样更有利于大家理解ajax的原理. $.ajax = function(opts){    //大家如果用过jQuery的ajax,应该记得$.ajax({url:...,data:....,type:'POS

第三十六课 Spark之TaskScheduler Spark shell案例运行日志详解、TaskScheduler和SchedulerBackend、FIFO与FAIR、Task运行时本地性算法详

</pre></h2><div><p>本节课内容:</p><p>1.     TaskSchedulerBackend与SchedulerBackend</p><p>2.     FIFO与FAIR两种调度模式</p><p>3.     Task数据本地性资源的分配</p></div><h3>一.Scheduler运行过程(Spark-shell角度)