【问题标题】:Does c++ support drawing graphics by itself?c++是否支持自己绘制图形?
【发布时间】:2016-04-02 11:50:12
【问题描述】:

在过去(Borland 时代),您可以使用 c 和 c++ 中的 graphics.h 头文件来绘制线条、正方形或圆形等图形。 turbo c++ 支持此功能。

现在,我想推荐的绘制图形的方法是使用 OpenGL 或 DirectX。

我只是想知道是否还有一种方法可以在 c++ 中绘制基本图形,如线条,类似于我们过去在 tc++ 中所做的方式。如果是,怎么做?

原因:这一切都始于我在比赛中无法解决一个要求我使用 c++ 绘制一些曲线的问题。他们正在使用 tc++(!?!) 并希望我们使用 graphics.h 头文件。

我不知道这样做,因为我没想到我会需要用 c++ 这种(过时的)方式绘制图形。无论如何,我仍在尝试找到一个解决方案,我使用像 gcc(g++) 这样的现代编译器并且仍然绕过 OpenGL。我不想回到 tc++。

顺便说一句,我正在使用 Ubuntu 和 gcc。我在 c/c++ 中的编程方式是在文本编辑器中编写代码,然后使用 CLI 进行编译。

【问题讨论】:

  • 考虑 SDL。它的便携且相当直接
  • 不是真的,但是 (1) 你总是可以使用文本 i/o 来生成例如一个 svg 文件,(2) 有一个 Boost 的图像处理子库,其中包括我记得的一些图形基元,以及 (3) 有一个基于 Cairo 的建议 C++ GUI。在任何给定平台上,您始终可以访问该平台的图形功能。

标签: c++ graphics


【解决方案1】:

简而言之,不。 Though Herb Sutter is pushing for it,基于 Cairo 的 C++ 化。 graphics.h 从来都不是标准 C++ 的一部分。

正如 sp2danny 在评论中提到的那样,SDL 是另一个使用非常广泛的跨平台库,您可能想看看。 (虽然由于它是一个 C 库,我个人觉得在 C++ 中使用它有点笨拙,但完全可以使用。)

【讨论】:

  • 有谁知道和cairomm有什么区别?或者有cairomm吗?
  • @Cheersandhth.-Alf 该提案没有提及cairomm,但有这样一句话:“从 C API 而非 C++ API 开始也提供了更容易潜在延展性的好处。 [...] 这使得在概念上更容易考虑和批准未来重塑 API 的提案,因为此类提案不会涉及更改现有 C++ 类的设计,如果起点是 C++ 库,这几乎肯定需要完成. "
  • 如果我没记错的话,像 Cairo、SDL 等都是扩展 C++ 功能以提供图形支持的库。该提案希望将 cairo 的功能添加到 c++ 中,以便开发人员不必使用上述库来满足较小的图形需求。
【解决方案2】:

C++11 不支持图形(以标准方式,没有外部库)。

如果您使用的是 Linux(例如 Ubuntu),则有很多方法可以用 C 或 C++ 制作图形。请注意,大多数 Linux 桌面都高于 X11(将来可能会被 Wayland 替换)。您可以使用Qt(及其graphics framework)、libsdlGtk 等...

您通常会围绕您的toolkit 提供的一些event loop 构建您的程序(例如Qt)。

如果您只是想绘制一些曲线或图形,您可以考虑popen(3)-ing 一些外部程序,如gnuplotgraphviz 等...(或生成一些SVG 和/或 HTML .. .)

【讨论】:

    【解决方案3】:

    看看这个,它可能会有所帮助:Basic Graphics library for gcc/g++ on par with graphics.h。我输入的答案。

    但是对于那些想要 BGI 类型接口的人,我已经知道它会是什么样子了。

    它将有一个基于套接字或共享内存的接口,用于连接软件图形引擎,该引擎将执行所有窗口/渲染等工作。它当然是开源的,并附带一个坚如磐石的 Windows 安装程序。从绘制几条 2D 线到编写下一个 Xbox 游戏,您所要做的就是向它输入命令。

    因此,假设您像我一样是一个彻头彻尾的 GCC 家伙(CLI 的摇滚!)。你只需下载这个 Windows 程序,一个 PDF 手册,告诉你在你使用的任何管道上拍摄什么(可能包括一个管道......聪明,不是吗?),有点像 VRML。但它易于学习,您可以打开一个套接字或其他任何东西并开始与它交谈。它只会显示您发送的任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-20
      • 2012-08-23
      • 1970-01-01
      • 2011-03-07
      • 2016-01-27
      • 2011-04-01
      • 1970-01-01
      • 2010-12-09
      相关资源
      最近更新 更多