- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用AGG实现高量图形输出(上)
用AGG实现高质量图形输出()AGG是一个开源、高效的跨平台2D图形库。AGG的功能与GDI+的功能非常类似,但提供了比GDI+更灵活的编程接口,其产生的图形的质量也非常高(自称超过GDI+)
使用前AGG的准备工作
下载AGG库,它的家在,目前最高版本是AGG2.5
解压,后面以[AGG]表示AGG的解压目录.
把[AGG]\include加入到include搜索目录中
把[AGG]\src里所有cpp加入到项目中(或者用makefile一起编译)
另外,AGG还有一些其它组件,用到时也要把它们(都是些.h和.cpp文件)加入项目:
如果要用AGG的控件和窗体,要加入[AGG]\src\ctrl\*.cpp和[AGG]\src\platform\OS\*.cpp,头文件在[AGG]\include\ctrl和[AGG]\include\platform里
如果要用到TrueType字体显示,要加入[AGG]\font_win32_tt目录下的源码和头文件。利用freetype库,则是[AGG]\font_freetype目录。
如果要用到Generic Polygon Clipper库(一个区域剪裁计算库),加入[AGG]\gpc目录下的源码和头文件。
AGG图形显示原理见下图:
其中:
Vertex Source 顶点源,里面存放了一堆2D顶点以及对应的命令,如MoveTo、LineTo等。
Coordinate conversion pipeline 坐标转换管道,它可以变换Vertex Source中的顶点,比如矩阵变换,轮廓提取,转换为虚线等。
Scanline Rasterizer 把顶点数据(矢量数据)转换成一组水平扫描线,扫描线由一组线段(Span)组成,线段(Span)包含了起始位置、长度和覆盖率(可以理解为透明度)信息。AGG的抗锯齿(Anti-Aliasing)功能也是在这时引入的。
Renderers 渲染器,渲染扫描线(Scanline)中的线段(Span),最简单的就是为Span提供单一颜色,复杂的有多种颜色(如渐变)、使用图像数据、Pattern等。
Rendering Buffer 用于存放像素点阵数据的内存块,这里是最终形成的图像数据。
要理解AGG的工作原理,先看一段代码:
#include?agg_basics.h
#include?agg_rendering_buffer.h
#include?agg_rasterizer_scanline_aa.h
#include?agg_scanline_u.h
#include?agg_renderer_scanline.h
#include?agg_pixfmt_rgb.h
#include?platform/agg_platform_support.h
#include?agg_ellipse.h
#include?agg_conv_contour.h
#include?agg_conv_stroke.h
?
class?the_application?:?public?agg::platform_support
{
public:
????the_application(agg::pix_format_e?format,?bool?flip_y)?:
????????agg::platform_support(format,?flip_y)
????{
????}
?
????virtual?void?on_draw()
????{
????????//Rendering?Buffer
????????agg::rendering_buffer?rbuf?=?rbuf_window();
????????agg::pixfmt_bgr24?pixf(rbuf);
???????
????????//?Renderers
????????typedef?agg::renderer_baseagg::pixfmt_bgr24?renderer_base_type;
????????renderer_base_type?renb(pixf);
?
????????typedef?agg::renderer_scanline_aa_solidrenderer_base_type?renderer_scanline_type;
????????renderer_scanline_type?rensl(renb);
???????
????????//?Vertex?Source
????????agg::ellipse?ell(100,100,50,50)
文档评论(0)