Быстро, Pixel Precision 2D API рисования для графики приложение? - PullRequest
3 голосов
/ 16 сентября 2008

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

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

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

Ответы [ 5 ]

3 голосов
/ 16 сентября 2008

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

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

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

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

2 голосов
/ 16 сентября 2008

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

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

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

1 голос
/ 16 сентября 2008

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

0 голосов
/ 16 сентября 2008

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

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

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

0 голосов
/ 16 сентября 2008

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

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

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

...