用于图形应用程序的快速,像素精度2D绘图API?
我想创建一个跨平台的绘图程序。编写我的应用程序的一个要求是我在画布上具有像素级精度。例如,我想编写自己的线条绘制算法,而不要依赖其他人。我不希望有任何形式的抗锯齿(同样,需要像素级控制。)我希望屏幕上的用户交互快速且响应迅速(正在等待我编写快速算法的能力。)
理想情况下,我想用Python或者Java作为第二选择。必须具有轻松使最终应用程序跨平台的能力。只要有必要,我将提交不同操作系统上的不同API,只要我可以在它们周围编写一个抽象层即可。有任何想法吗?
附录:我需要在屏幕上绘制的能力。绘制到一个文件,我已经弄清楚了。
解决方案
回答
如果我们想使用C ++,QT的Canvas a QPainter非常适合此工作。它是跨平台的。
QT有一个python绑定,但我从未使用过。
对于Java,使用SWT,画布的像素级操作有些困难和缓慢,因此我不建议这样做。另一方面,Swing的Canvas很好并且响应迅速。我从未使用过AWT选项,但我们可能不想去那里。
回答
适用于Python的Pyglet库可能适合需求。它使我们可以使用OpenGL(一种跨平台的图形API)。我们可以禁用抗锯齿和捕获屏幕区域到缓冲区或者文件。此外,我们可以使用其事件处理,资源加载和图像处理系统。我们可能还可以将其绑定到PIL(Python图像库),以及绝对流行的跨平台矢量图形库Cairo中。
我提到Pyglet而不是纯PyOpenGL,因为Pyglet透明地处理了许多丑陋的OpenGL内容,而我们却毫不费力。
我和一个朋友目前正在使用Pyglet进行绘图程序。例如,有一些怪癖,OpenGL在OS X上始终是双重缓冲的,因此我们必须绘制所有内容两次,一次绘制当前帧,另一次绘制另一帧,因为每当显示刷新时,它们都会被翻转。我们可以在此Subversion存储库中查看我们当前的进度。 (主干中的Splatterboard.py是我们要运行的文件。)如果我们不打算使用svn,我很乐意通过电子邮件将最新消息的.zip发送给我们。如果我们愿意的话,可以随时窃取代码。
回答
我本周刚刚整理了一些幻灯片和演示代码,用于使用库pyglet使用python中的OpenGL使用OpenGL进行2d图形处理。我们可以在这里看到我的东西:http://tartley.com/?p=378
它的速度非常快(相对于python),我设法在屏幕上移动了约1,000个独立定位和定向的对象,每个对象都有约50个顶点。
它非常可移植,我在此环境中编写的所有代码都可以在Windows,Linux和Mac(甚至是晦涩的环境(如Pypy))上运行,而无需我考虑。
更新:关于同一主题也有很多新帖子:http://tartley.com/?cat=27
回答
我会推荐wxPython
它是一个漂亮的跨平台平台,我们可以按像素进行控制,如果我们改变主意,可以将其与pyglet或者agg之类的库一起使用。
我们可以在docs和demos下载中找到一些有用的示例。
回答
如果打开了语言选择,则可能会使用Haxe创建Flash文件。 Haxe是免费的,并且是一种完整的动态编程语言。然后是相关的Neko,一个虚拟机(如Java,Ruby,Parrot ...),可在Mac,Windows和Linux上运行。作为某种形式的Flash的新改进形式,它自然可以吸引东西。 http://haxe.org/