2008-09-15 3 views
3

Я хотел бы создать кросс-платформенную программу рисования. Единственным требованием для написания моего приложения является то, что у меня есть точность уровня пикселей над холстом. Например, я хочу написать собственный алгоритм рисования линии, а не полагаться на кого-то из elses. Я не хочу, чтобы какая-либо форма сглаживания (опять-таки, требуется контроль уровня пикселей). Я бы хотел, чтобы взаимодействия пользователей на экране были быстрыми и отзывчивыми (в ожидании моей способности быстро писать алгоритмы.)Быстрый, Pixel Precision 2D Drawing API для графического приложения?

В идеале, Я хотел бы написать это в Python, или, возможно, в качестве второго варианта Java. Возможность легко сделать окончательную кросс-платформу приложения обязательна. При необходимости я буду подчиняться различным API-интерфейсам на разных ОС, если я могу написать слой абстракции вокруг них. Есть идеи?

добавление: Мне нужна возможность нарисовать на экране. Рисуя в файл, я понял.

ответ

3

Я только на этой неделе собрал несколько слайдов и демонстрационный код для выполнения 2-й графики с использованием OpenGL из python с использованием пинглета библиотеки. Вы можете увидеть мои вещи здесь: http://tartley.com/?p=378

Это очень быстро (условно говоря, для python). Мне удалось обойти около 1000 независимых и ориентированных объектов, перемещающихся по экрану, каждый из которых имеет около 50 вершин.

Это очень портативный, весь код, который я написал в этой среде, работает на окнах, Linux и Mac (и даже на неясных средах, таких как Pypy), без меня когда-либо об этом думать.

Обновление: Есть куча новых сообщений на эту же тему тоже: http://tartley.com/?cat=27

+0

Я понимаю, что это старый пост, но ссылка сломана. – enobrev 2011-08-25 18:14:58

0

QT's Canvas QPainter очень хорош для этой работы, если вы хотите использовать C++. и это кросс-платформа.

Существует связка python для QT, но я никогда не использовал ее.

Что касается Java, использование SWT, манипуляции с изображением на холсте несколько сложнее и медленнее, поэтому я бы не рекомендовал его. С другой стороны, Swing's Canvas довольно хороша и отзывчива. Я никогда не использовал параметр AWT, но вы, вероятно, не хотите туда идти.

2

Библиотека Pyglet для Python может удовлетворить ваши потребности. Он позволяет использовать OpenGL, кросс-платформенный графический API. Вы можете отключить области сглаживания и захвата экрана в буфер или файл. Кроме того, вы можете использовать обработку событий, загрузку ресурсов и системы обработки изображений. Возможно, вы также можете связать его с PIL (Библиотека изображений Python) и определенно Cairo, популярной кросс-платформенной векторной графической библиотекой.

Я упоминаю Pyglet вместо чистого PyOpenGL, потому что Pyglet обрабатывает много уродливых OpenGL-файлов прозрачно без каких-либо усилий с вашей стороны.

В настоящее время мы с другом работаем над программой рисования с использованием Pyglet. Есть несколько причуд - например, OpenGL всегда с двойной буферизацией на OS X, поэтому мы должны рисовать все дважды, один раз для текущего кадра и снова для другого фрейма, поскольку они перевернуты всякий раз, когда дисплей обновляется. Вы можете посмотреть наш текущий прогресс in this subversion repository. (Splatterboard.py в trunk - это файл, который вы хотите запустить.) Если вы не используете svn, я был бы рад написать вам .zip из последнего источника. Не стесняйтесь красть код, если вы посмотрите на него.

0

Я бы порекомендовал wxPython

Это красиво кросс-платформенный, и вы можете получить за контроль пикселей и если вы меняете помните, что вы можете использовать его в таких библиотеках, как pyglet или agg.

Вы можете найти полезные примеры только для того, что вы пытаетесь сделать в документации по документам и демо.

1

Если язык открыт, файл Flash, созданный с помощью Haxe, может иметь место. Haxe является бесплатным и полным, динамическим языком программирования. Тогда есть связанная Neko, виртуальная машина (например, Java, Ruby's, Parrot ...) для работы на Mac, Windows и Linux. Будучи в некотором смысле новой улучшенной формой Flash, естественно, она может нарисовать материал. http://haxe.org/