Библиотека векторной графики для Windows с привязками к C #

#c# #.net #graphics #vector-graphics

#c# #.net #графика #векторная графика

Вопрос:

Ради интереса я хотел бы посмотреть, смогу ли я создать библиотеку, которая немного похожа на небольшое подмножество WPF: управляемую графическую систему на основе векторных шаблонов. (У меня есть несколько теорий, которые я хотел бы проверить.) Однако я не графический гений и для начала ищу хорошую библиотеку векторной графики.

Я знаю, что Microsoft использует MilCore внутри, который, похоже, более или менее передает список векторных структур из управляемого мира в неуправляемый мир и отображает их. Я полагаю, что эта базовая библиотека основана на немедленном режиме. Я хотел бы использовать существующую бесплатную библиотеку векторной графики с расширенным списком желаемых функций:

  1. Векторная графика
  2. Немедленный или сохраненный режим, предпочтительно немедленный?
  3. Поддержка пиксельных шейдеров
  4. Было бы неплохо протестировать геометрию
  5. Поддержка изображений, поддержка поворота изображений
  6. Привязка к .NET
  7. Стабильна до такой степени, что является коммерчески жизнеспособной в небольших масштабах

Вещи, которые мне не нужны:

  1. Кроссплатформенная поддержка. Если это блокирует ее в DirectX или даже Direct3D 10 или 11 конкретно, пусть будет так.
  2. Управление графикой более высокого уровня во всем, что напоминает «элемент управления». Этот уровень управления я, вероятно, хотел бы сделать сам.
  3. Я не боюсь небольшого взаимодействия.
  4. Потрясающая производительность. Я бы хотел, чтобы это было производительно, но если из-за этого слишком сильно пострадает удобство использования, я не добьюсь успеха.

Эта библиотека http://jeremiahmorrill.com/2011/02/05/a-simple-directcanvas-tutorial / выглядит похоже на то, что я хотел бы, но желательно что-то более стабильное и с большим количеством примеров.
Я бы предпочел что-нибудь на уровень выше DX / OpenGL, если это возможно.

Какие варианты у меня есть? Это существует или это просто несбыточная мечта? Заранее благодарю вас — у меня такое чувство, что я только что ввел список покупок, но я был бы очень признателен сообществу за отзывы по этому поводу. Похоже, это не совсем соответствует другим вопросам по векторной графике, которые я видел в списке здесь, но если я пропустил отличный пост, дайте мне знать!

Комментарии:

1. Я уже некоторое время ищу что-то подобное, но безуспешно. Я надеюсь, что кто-нибудь сможет ее найти, но это больше похоже на поиск Святого Грааля 🙂 Есть прямые оболочки для DirectX, но это бесполезно, тогда есть DirectCanvas, но это не совсем то, что мне нужно…

2. Я взглянул на Clutter, но не смог найти ни одного обновленного. СЕТЕВЫЕ привязки. Есть комментарии по поводу беспорядка?

Ответ №1:

Я несколько раз работал с VG.NET библиотека. Она действительно проста в использовании, имеет отличный дизайнер, а изображения и анимация выполняются быстро. Это моя лучшая рекомендация.

Комментарии:

1. Это выглядит не так далеко от того, что я ищу, но меня это беспокоит… ну, это выглядит немного устаревшим. Она основана на GDI . Я предполагаю, что такой тип исключает поддержку шейдеров тоже. Однако спасибо! Приятно, когда не указывают на что-то не столь низкого уровня.

2. Да, она построена на GDI , но производительность действительно отличная. Они проделали очень большую оптимизацию.

3. Что касается VG.net Я разработчик, и мы работаем над портом Direct2D. Я пока не могу сказать, когда она будет выпущена. Вы должны иметь возможность переключаться между Direct2d и GDI , используя те же библиотеки.

Ответ №2:

Я уже использовал Cairo для векторной графики. Это отличная библиотека для начала работы (кроссплатформенная, с множеством языковых привязок, с открытым исходным кодом и т.д.).

Вы можете ознакомиться с привязками к языкам здесь:

http://cairographics.org/bindings/

Я с большим успехом использовал эти привязки .NET / Mono (от NDesk):

http://git.ndesk.org/?p=cairo-sharp

Комментарии:

1. Согласно этой странице, существует серверная часть OpenGL: cairographics.org/backends

2. Серверная часть OpenGL довольно великолепна. Однажды я использовал ее для ускоренных текстовых преобразований в забавном проекте текстового редактора, над которым я работал. Очень аккуратно.

3. Вот сообщение, которое я нашел о Cairo, OpenGL и C #: majkel.wordpress.com/2007/04/26/using-cairo-opengl-and-c

Ответ №3:

Вы можете попробовать SlimDX http://en.wikipedia.org/wiki/SlimDX — у них есть оболочки Direct2D и DirectX. Я полагаю, что оба они удовлетворят вашим требованиям.

Комментарии:

1. 1. Direct2D был устаревшим для DIREEXT3D из-за аппаратной поддержки (насколько я помню, сейчас вы просто делаете 2d в 3d) 2. SlimDX на самом деле не является векторной библиотекой. Этот движок растеризации может делать похожие вещи, но не совсем то же самое.

Ответ №4:

Вы можете увидеть Mono Open GL, которые предоставят вам возможности .NET и Open GL, но вам придется углубиться в open gl, чтобы создать свою библиотеку, но это обеспечит независимость от платформы.

http://www.opentk.com/

http://www.mono-project.com/Tao

Я еще не пробовал ни один из них сам, но, глядя на примеры, они кажутся довольно простыми для начала. Выполнение на Open GL будет полезно в будущем, поскольку даже мобильные устройства, такие как iPhone, теперь поставляются с поддержкой Open GL.

Комментарии:

1. Я бы действительно предпочел держаться подальше от базовой графической платформы, насколько это возможно. Я хотел бы поработать над чем-то большим на уровне геометрических объектов, а не вершин — поддерживает ли это такой уровень, или я собираюсь перейти к подробным деталям рисования трапеций?