Я просто хочу нарисовать простые 2D-объекты, такие как круг, линия, квадрат и т. Д. На C#. Как мне это сделать? Вернувшись в дни Turbo C++, я помню, как инициализировал некоторую графическую библиотеку для этого. Нужно ли мне что-то делать в .NET? Разве это не так для 3D-объектов? Будут ли такие вещи, как DirectX, сделать это проще? Любые ссылки на учебные пособия или образцы очень ценятся.Как рисовать простую графику на C#?
ответ
Как уже сказал, проверить System.Drawing. (Я только повторяю это для полноты.) System.Drawing предоставляет вашему приложению библиотеку рисования Windows GDI+.
Хороший учебник, который поможет вам начать работу с System.Drawing и GDI +, можно найти по адресу C# Corner.
Некоторые важные пункты отметить:
- Многие GDI + объекты реализации IDisposable интерфейс, и, следовательно, должны быть обернуты в
using
блоков. Обязательно соблюдайте соответствующие соглашения об утилизации; неспособность уничтожить объекты GDI + может привести к действительно неприятным побочным эффектам для вашего приложения. (Объекты GDI + в .NET соответствуют их эквивалентам Windows API). - API, такие как DirectX, чрезвычайно сложны и не без оснований. Они разработаны не для простых форм, а для сложных, высокопроизводительных и интерактивных мультимедийных приложений. (Другими словами, игры, как правило.) Вы можете получить доступ к DirectX через интерфейсы управляемого DirectX, но опять же, это, вероятно, слишком велико для ваших прямых целей.
- Если вы заинтересованы в более удобном способе работы с DirectX, то можно найти путь XNA. Тем не менее, это очень специфическая для игр библиотека, и снова, вероятно, будет излишней. Я немного опаздываю на вечеринку, но, согласно приведенным ниже комментариям, это больше не поддерживается. (Это имеет смысл, я ничего не слышал об этом годами.)
Заканчивать пространство имен System.Drawing: http://msdn.microsoft.com/en-us/library/system.drawing.aspx
Посмотрите на System.Drawing пространство имен
Вам нужно использовать GDI +.
Как вы это делаете, это немного зависит от того, на что вы хотите нарисовать. Вы можете нарисовать элемент управления или форму, или вы можете нарисовать объект изображения. В любом случае вам нужен объект System.Drawing.Graphics, который, я считаю, находится в System.Drawing.dll.
Вы можете создать экземпляр нового класса Bitmap и вызвать Graphics.FromImage (myImage), а затем рисовать с использованием методов только что созданного объекта Graphics. Если вы хотите нарисовать форму или элемент управления, просто переопределите метод OnPaint и найдите свойство Graphics в классе EventArgs.
Более подробная информации о System.Drawing именах здесь: http://msdn.microsoft.com/en-us/library/system.drawing.aspx
Вы не можете создавать новый образ, но вы можете создать экземпляр нового растрового изображения. – MusiGenesis
Ах да, спасибо за разъяснение. Я знал это, но забыл. –
Читайте о GDI, GDI +, System.Drawing пространства имен, например here.
DirectX - это не то, что вы могли бы использовать для рисования простых фигур, а для визуализации сложного 3D-материала, также, используя DX Api под C#, немного сложнее (хотя и не так сложно).
Посмотрите на Управляемые Direct3D графики API в .NET Source
Вот простой пример кода, который поможет вам начать работу (предполагается, что у вас есть PictureBox с именем pictureBox1):
Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
g.DrawLine(new Pen(Color.Red), 0, 0, 10, 10);
}
pictureBox1.Image = bmp;
графический объект имеет кучу других методов рисования, и Intellisense покажет вам как их назвать.
GDI + используя System.Drawing
- 1. XNA Как рисовать простую графику?
- 2. Как нарисовать простую графику
- 3. SpriteKit и программно рисовать простую графику
- 4. Как рисовать прозрачную графику на прозрачные BitmapData?
- 5. Android - Как рисовать графику на SurfaceView
- 6. Как рисовать графику сверху ChartPanel?
- 7. как рисовать простую графику, когда я перетащить мышью на DIV, как Photoshop, используя Рафаэль
- 8. Java: невозможно рисовать 2D-графику на фрейме
- 9. visual C# рисовать графику перед кнопками
- 10. Использование Turbo C++, как я могу рисовать графику в C?
- 11. Рекурсивно рисовать графику в Java
- 12. Как создать простую 2D-графику с приличными кадрами в секунду?
- 13. Как рисовать графику в прокручиваемом JPanel?
- 14. Java, как рисовать постоянно меняющуюся графику
- 15. Как получить простую графику на холсте с графическим интерфейсом
- 16. Как создать простую 2D-графику в режиме реального времени?
- 17. Как рисовать Простую линейную диаграмму в iphone?
- 18. Можно ли рисовать графику в Visual C++ 2010 Express?
- 19. C# рисовать простую диаграмму рабочего процесса и указывать текущий статус
- 20. R - как рисовать графику в существующее окно, созданное другим приложением
- 21. Как я могу сделать простую графику анимацию в JPanel
- 22. Как мы можем рисовать любую графику только с холстом?
- 23. Как рисовать пунктирные круги, используя графику в iphone sdk?
- 24. Как правильно/чисто рисовать графику SVG с помощью ProcessingJS?
- 25. Как добавить графику в C++
- 26. Как клонировать графику в C#?
- 27. как рисовать треугольную графику нечеткого членства с кодом matlab
- 28. Как запустить эту простую программу на C++?
- 29. Как смонтировать тестовую графику?
- 30. Добавить простую графику поверх темы Голо темы по умолчанию?
«Согласно сообщению, отправленному 31 января 2013 года, ** XNA больше не активно разрабатывается **, и он не поддерживается в рамках новых слоев« интерфейса Metro »Windows 8 и платформы Windows RT». [Цитата из Википедии] (https://en.m.wikipedia.org/wiki/Microsoft_XNA) – klaas
Возможно, посмотрите на [unity3d] (http://unity3d.com), у него есть хорошие уроки и бесплатная инди/личная лицензия. Или отметьте это [reddit] (https://www.reddit.com/r/gamedev/comments/1et2li/c_game_engines_other_than_xnamonogame/) – klaas
Я не рекомендую GDI + или System.Drawing Я здесь, потому что FillRectangle слишком медленный, и это медленно вызывает лежащие в основе SafeNativeMethods GDI + (Gdip) FillRectangle waay слишком медленно, чтобы быть полезным. это 2017 год, и я борюсь против простой стандартной функции FillRectangle, вы издеваетесь надо мной. – hamish