Рендеринг графики на C#
Другие советы
Да, я написал элемент управления Windows Forms, который оборачивает DirectX 9.0 и обеспечивает прямое манипулирование поверхностью видео на уровне пикселей.
На самом деле я написал еще один пост о переполнении стека, в котором спрашиваю, есть ли другие лучшие подходы: Небезопасный C# и указатели для 2D-рендеринга: хорошо или плохо?
Несмотря на относительно высокую производительность, для него требуется опция unsafe компилятора, поскольку для эффективного доступа к памяти используются указатели.Отсюда и причина этого предыдущего поста.
Это высокий уровень необходимых шагов:
- Загрузите DirectX SDK.
- Создайте новый C# Формы Windows Проект и ссылка на установленную сборку Microsoft DirectX.
- Инициализируйте новый объект устройства DirectX с параметрами презентации (Windowed, задняя буферизация и т. Д.), Вам требуется.
- Создайте устройство, заботясь о записи поверхности «шага» и режиме отображения тока (биты на пиксель).
- Когда вам нужно что-то отобразить,
Lock
Поверхность задних чередов и хранит возвращенный указатель на начало памяти поверхности. - Используйте арифметику указателя, рассчитайте фактическую позицию пикселя в данных на основе поверхностного шага, битов на пиксель и фактической координаты пикселя X/Y.
- В моем случае для простоты я придерживаюсь 32 бит/с, то есть настроить пиксель так же просто, как:*(surfacePointer + (y * шаг + x))=Color.FromARGB(255,0,0);
- Закончив рисунок,
Unlock
задняя буферная поверхность.Представьте поверхность. - При необходимости повторите шаг 5.
Имейте в виду, что при таком подходе вам нужно быть очень осторожным при проверке текущего режима отображения (шаг и количество бит на пиксель) целевой поверхности.Также вам понадобится стратегия, позволяющая справляться с изменением размера окна или формата экрана во время работы вашей программы.
Управляемый DirectX (пространство имен Microsoft.DirectX) для более быстрой 3D-графики.Это надежная оболочка .NET над API DirectX, которая немного снижает производительность при создании объектов .NET и маршаллинге.Если вы не пишете полнофункциональный современный 3D-движок, он будет работать нормально.
Window Presentation Foundation (WPF) (пространство имен Windows.Media) — лучший выбор для 2D-графики.Также имеет ограниченные возможности 3D.Цель — заменить Windows Forms векторной платформой с аппаратным ускорением, независимой от разрешения.Очень удобно, поддерживает несколько разновидностей пользовательских элементов управления, ресурсов, привязки данных, событий и команд...также есть несколько WTF.Скорость обычно выше, чем у GDI, и медленнее, чем у DirectX, и во многом зависит от того, как вы что-то делаете (видел, что после разумного переписывания что-то работало в 60 раз быстрее).Нам удалось реализовать 3 экрана 1280x1024 с индикаторами, графиками и графиками в реальном времени на одном (и не самом лучшем) компьютере.
Вы можете попробовать изучить WPF, используя Visual Studio и/или Expression Blend.Я не уверен, насколько сложными вы пытаетесь стать, но он должен быть в состоянии справиться с простым редактором.Проверьте это Статья MSDN для получения дополнительной информации.
Вы можете заглянуть в Каирская графическая библиотека.А Мононуклеоз проект имеет привязки для C#.
Каир это вариант.В настоящее время я переписываю свое картографическое программное обеспечение, используя GDI+ и Cairo.Среди других функций он имеет генератор тайловых карт.