5

我想创建一个跨平台的绘图程序。编写我的应用程序的一个要求是我在画布上具有像素级精度。例如,我想编写自己的画线算法,而不是依赖别人。我不想要任何形式的抗锯齿(同样,需要像素级控制。)我希望屏幕上的用户交互快速且响应迅速(取决于我编写快速算法的能力。)

理想情况下,我想用 Python 或 Java 作为第二选择来编写它。必须能够轻松地使最终的应用程序跨平台。如有必要,我将提交给不同操作系统上的不同 API,只要我可以围绕它们编写一个抽象层。有任何想法吗?

附录:我需要在屏幕上绘图的能力。绘制到我已经弄清楚的文件。

4

5 回答 5

4

本周,我整理了一些幻灯片和演示代码,用于使用库 pyglet 从 python 中使用 OpenGL 进行 2d 图形。这是一个有代表性的帖子:Pyglet 第 2 周,更好的顶点吞吐量(或使用相同基本思想的 3D 东西

它非常快(相对而言,对于 python)我已经设法让大约 1,000 个独立定位和定向的对象在屏幕上移动,每个对象有大约 50 个顶点。

它非常便携,我在这个环境中编写的所有代码都可以在 windows、Linux 和 mac(甚至像 Pypy 这样的晦涩环境)上运行,而我无需考虑它。

其中一些帖子很旧,它们之间的链接断开了。您应该能够使用“图形”标签找到所有相关帖子。

于 2008-09-15T21:43:51.503 回答
2

Python的Pyglet库可能适合您的需要。它允许您使用 OpenGL,一个跨平台的图形 API。您可以禁用抗锯齿并将屏幕区域捕获到缓冲区或文件中。此外,您可以使用它的事件处理、资源加载和图像处理系统。您可能还可以将其与 PIL(Python 图像库)以及流行的跨平台矢量图形库 Cairo 相关联。

我提到 Pyglet 而不是纯 PyOpenGL,因为 Pyglet 透明地处理了很多丑陋的 OpenGL 东西,而您无需付出任何努力。

我和一个朋友目前正在使用 Pyglet 开发一个绘图程序。有一些怪癖——例如,OpenGL 在 OS X 上总是双缓冲,所以我们必须绘制两次,一次用于当前帧,另一次用于另一帧,因为每当显示刷新时它们都会翻转。您可以在这个 subversion 存储库中查看我们当前的进展。(主干中的 Splatterboard.py 是您要运行的文件。)如果您不打算使用 svn,我很乐意通过电子邮件向您发送最新源代码的 .zip。如果您调查它,请随意窃取代码。

于 2008-09-15T21:38:45.290 回答
1

如果语言选择打开,则使用 Haxe 创建的 Flash 文件可能会有一个位置。Haxe 是免费的,并且是一种完整的动态编程语言。然后是相关的 Neko,一个可以在 Mac、Windows 和 Linux 上运行的虚拟机(如 Java、Ruby、Parrot...)。在某些方面作为 Flash 的一种新改进形式,它自然可以绘制东西。 http://haxe.org/

于 2008-09-16T05:14:48.690 回答
0

如果您想使用 C++,QT 的 Canvas 和 QPainter 非常适合这项工作。它是跨平台的。

QT 有一个 python 绑定,但我从未使用过它。

至于Java,使用SWT,画布的像素级操作有些困难和缓慢,所以我不推荐它。另一方面,Swing 的 Canvas 非常好并且反应灵敏。我从未使用过 AWT 选项,但您可能不想去那里。

于 2008-09-15T21:21:17.610 回答
0

我会推荐wxPython

它非常漂亮地跨平台,您可以获得每像素控制,如果您改变主意,您可以将它与 pyglet 或 agg 等库一起使用。

您可以在文档和演示下载中找到一些有用的示例来说明您正在尝试做的事情。

于 2008-09-15T21:59:56.923 回答