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

StackOverflow https://stackoverflow.com/questions/67000

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

Я бы посоветовал wxPython

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top