跨平台绘图库

15
我一直在寻找一个能够从C++调用且可以用于绘制一些相对简单的几何图形,如线条、矩形、圆形和文本(水平和垂直)以及将输出保存为PNG的跨平台2D绘图库。
我认为商业软件包优于开源软件,因为我们希望不必担心许可问题(除非有没有署名条款的BSD样式许可证)。我看过Cairo Graphics,看起来很有前途,但是默认情况下文本渲染看起来不怎么好,升级文本后端会使我们涉足模糊的许可证领域。
我需要它在Windows、Mac和Linux上使用。最好是相对轻量级和易于集成的东西。我考虑过Qt,但那对我们的应用程序来说太重了。
如果你有任何想法,那就太棒了。

2
是的,很遗憾QImageQPainter被埋在QtGui中而不是单独放在一个QtPainting库中。当他们在Qt 4.0中分离库时,它们没有真正可用,需要一个QApplication,但现在你可以在单独的线程中使用它们,所以我认为一个QtPainting库会有很多意义。让我们等待Qt 5 :) - Marc Mutz - mmutz
11个回答

12

尝试使用Anti-Grain Geometry。以下是该库的描述:

Anti-Grain Geometry(AGG)是一个基于工业标准C++编写的开源免费图形库。 AGG的使用条款和条件在许可证页面上有说明。 AGG不依赖于任何图形API或技术。基本上,您可以将AGG视为从某些矢量数据生成内存中像素图像的渲染引擎。但当然,AGG能够做得比这更多。AGG的思想和理念包括:

  • 抗锯齿。
  • 子像素精度。
  • 最高可能的质量。
  • 高性能。
  • 平台无关和兼容性。
  • 灵活性和可扩展性。
  • 轻量级设计。
  • 可靠性和稳定性(包括数值稳定性)。

就在前几天,我注意到我的GPS设备正在使用AGG进行地图渲染。很棒! - Tomas Andrle
5
提醒一下,我曾多次试图联系AGG开发者以获取商业许可证,但未得到回复。网站也已经两年没有更新了,所以我认为它已不再受支持。因此,我最终决定在我需要的三个平台上自己编写一个定制解决方案。如果使用非GPL许可证的旧版本,这仍然可能是个好的解决方案,因此我将其留作最佳答案,但我不想处理一个不受支持的库。 - Gerald
3
这个网站的报道,AGG的创造者Maxim Shemanarev于2013年11月去世。我只是通过他在AGG上的杰出工作才认识他。你仍然可以在GitHub上找到一些独立改进版的AGG。 - Jaime Ivan Cervantes
@JaimeIvanCervantes 如果您能够提供AGG推荐版本的链接,那将非常有帮助。我搜索了C++库中最受欢迎的项目,并找到了这个:https://github.com/tyoma/agge - JamesHoux

9

另一个是:Skia。在Android和Chrome中使用,在积极开发中,支持硬件加速。


5

2

Antigrain提供高质量的原始渲染,似乎能够渲染TrueType字体,并提供商业许可证(需请求)。

http://www.antigrain.com/


2
你尝试过FLTK吗?它轻巧、跨平台、支持2D/3D图形,并带有良好的小部件集(包括绘图组件)。API简单直观。

1

我应该更加明确一些;Cairo Graphics 在渲染大型文本方面表现良好,但我需要在图表和图形上渲染小型文本标签,这时它看起来像垃圾,因为它使用矢量图形进行渲染。只要文本足够大,至少有2个像素的线围绕着它就没问题了,但是尝试以字体大小8或类似大小渲染一些文本,看看你是否能读得懂;) - Gerald

1

我使用CImg:跨平台(自包含单个头文件),简单,简洁。 PNG不受本地支持,但如果安装了ImageMagick,则可以处理(请参见支持的格式)。

还请参阅相关问题


我对CImg印象非常深刻。在我尝试过的几个库中,它是最容易集成的。 - M Katz

1

2
我曾经使用过SDL和SFML,强烈推荐SFML而不是SDL。它利用了C++的构造(面向对象编程,函数重载等),更易于上手且更有趣。对我来说唯一可能的缺点是与SDL相比,它仍然是一个较新的库,因此可能不太稳定。 - Bastien Léonard
2
此外,SDL没有预设函数来绘制他所列出的基本图形。你需要找到别人写好的代码或自己编写。 - Michaël Larouche

1

你可以使用 Allegro 5(因为提到了SDL和SFML)。它提供了所有你需要的平台(以及更多),并且可以渲染形状并保存为PNG。版本5具有改进的API和硬件加速功能。对于任何这些低级跨平台库,你都必须找到自己的图表解决方案。

我在我的博客上放了一些关于Allegro和在Mac上使用它的笔记。


这看起来非常不错。您知道是否可以在具有自己的窗口管理而不是使用 Allegro 窗口管理的应用程序中使用它吗? - Gerald

0

我会选择AGG或Cairo。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接