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

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

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

有帮助吗?

解决方案

我本周刚刚整理了一些幻灯片和演示代码,用于使用 pyglet 库从 python 中使用 OpenGL 进行 2d 图形处理。你可以在这里看到我的东西: http://tartley.com/?p=378

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

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

更新: 还有很多关于同一主题的新帖子: http://tartley.com/?cat=27

其他提示

皮格莱特 Python 库可能会满足您的需求。它允许您使用 OpenGL(一种跨平台图形 API)。您可以禁用抗锯齿功能并将屏幕区域捕获到缓冲区或文件中。此外,您还可以使用它的事件处理、资源加载和图像处理系统。您或许还可以将其与 PIL(Python 图像库)联系起来,当然还有 Cairo,一个流行的跨平台矢量图形库。

我提到 Pyglet 而不是纯粹的 PyOpenGL,因为 Pyglet 可以透明地处理许多丑陋的 OpenGL 内容,而无需您付出任何努力。

我和一个朋友目前正在使用 Pyglet 开发一个绘图程序。有一些怪癖 - 例如,OpenGL 在 OS X 上始终是双缓冲的,因此我们必须将所有内容绘制两次,一次针对当前帧,另一次针对另一帧,因为每当显示器刷新时它们都会翻转。您可以看看我们目前的进展 在这个颠覆存储库中. 。(trunk 中的 Splatterboard.py 是您要运行的文件。)如果您不习惯使用 svn,我很乐意通过电子邮件向您发送最新源代码的 .zip。如果您研究它,请随意窃取代码。

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

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

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

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

我会推荐 wxPython

它是完美的跨平台,你可以获得每个像素的控制,如果你改变主意,你可以将它与 pyglet 或 agg 等库一起使用。

您可以在文档和演示下载中找到一些有用的示例来说明您正在尝试执行的操作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top