Быстрый API 2D-рисования Pixel Precision для графического приложения?

Я бы хотел создать кроссплатформенную программу для рисования. Единственное требование для написания моего приложения заключается в том, чтобы у меня была точность на уровне пикселей на холсте. Например, я хочу написать свой собственный алгоритм рисования линий, а не полагаться на чей-то еще. Я не хочу никакой формы сглаживания (опять же, требуется контроль уровня пикселей). Я хотел бы, чтобы взаимодействие пользователей на экране было быстрым и отзывчивым (в ожидании моей способности писать быстрые алгоритмы).

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

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


person dave mankoff    schedule 15.09.2008    source источник


Ответы (5)


Только на этой неделе я собрал несколько слайдов и демонстрационный код для создания 2D-графики с использованием OpenGL из Python с использованием библиотечного pyglet. Мои материалы можно посмотреть здесь: http://tartley.com/?p=378

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

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

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

person Jonathan Hartley    schedule 15.09.2008
comment
Я понимаю, что это старый пост, но ссылка не работает. - person enobrev; 25.08.2011

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

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

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

person Steve Landey    schedule 15.09.2008

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

person DarenW    schedule 16.09.2008

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

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

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

person shoosh    schedule 15.09.2008

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

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

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

person Toni Ruža    schedule 15.09.2008