2009-08-19 4 views
14

Я просто хочу нарисовать простые 2D-объекты, такие как круг, линия, квадрат и т. Д. На C#. Как мне это сделать? Вернувшись в дни Turbo C++, я помню, как инициализировал некоторую графическую библиотеку для этого. Нужно ли мне что-то делать в .NET? Разве это не так для 3D-объектов? Будут ли такие вещи, как DirectX, сделать это проще? Любые ссылки на учебные пособия или образцы очень ценятся.Как рисовать простую графику на C#?

ответ

16

Как уже сказал, проверить System.Drawing. (Я только повторяю это для полноты.) System.Drawing предоставляет вашему приложению библиотеку рисования Windows GDI+.

Хороший учебник, который поможет вам начать работу с System.Drawing и GDI +, можно найти по адресу C# Corner.

Некоторые важные пункты отметить:

  1. Многие GDI + объекты реализации IDisposable интерфейс, и, следовательно, должны быть обернуты в using блоков. Обязательно соблюдайте соответствующие соглашения об утилизации; неспособность уничтожить объекты GDI + может привести к действительно неприятным побочным эффектам для вашего приложения. (Объекты GDI + в .NET соответствуют их эквивалентам Windows API).
  2. API, такие как DirectX, чрезвычайно сложны и не без оснований. Они разработаны не для простых форм, а для сложных, высокопроизводительных и интерактивных мультимедийных приложений. (Другими словами, игры, как правило.) Вы можете получить доступ к DirectX через интерфейсы управляемого DirectX, но опять же, это, вероятно, слишком велико для ваших прямых целей.
  3. Если вы заинтересованы в более удобном способе работы с DirectX, то можно найти путь XNA. Тем не менее, это очень специфическая для игр библиотека, и снова, вероятно, будет излишней. Я немного опаздываю на вечеринку, но, согласно приведенным ниже комментариям, это больше не поддерживается. (Это имеет смысл, я ничего не слышал об этом годами.)
+4

«Согласно сообщению, отправленному 31 января 2013 года, ** XNA больше не активно разрабатывается **, и он не поддерживается в рамках новых слоев« интерфейса Metro »Windows 8 и платформы Windows RT». [Цитата из Википедии] (https://en.m.wikipedia.org/wiki/Microsoft_XNA) – klaas

+0

Возможно, посмотрите на [unity3d] (http://unity3d.com), у него есть хорошие уроки и бесплатная инди/личная лицензия. Или отметьте это [reddit] (https://www.reddit.com/r/gamedev/comments/1et2li/c_game_engines_other_than_xnamonogame/) – klaas

+0

Я не рекомендую GDI + или System.Drawing Я здесь, потому что FillRectangle слишком медленный, и это медленно вызывает лежащие в основе SafeNativeMethods GDI + (Gdip) FillRectangle waay слишком медленно, чтобы быть полезным. это 2017 год, и я борюсь против простой стандартной функции FillRectangle, вы издеваетесь надо мной. – hamish

0

Вам нужно использовать 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

+0

Вы не можете создавать новый образ, но вы можете создать экземпляр нового растрового изображения. – MusiGenesis

+0

Ах да, спасибо за разъяснение. Я знал это, но забыл. –

2

Читайте о GDI, GDI +, System.Drawing пространства имен, например here.
DirectX - это не то, что вы могли бы использовать для рисования простых фигур, а для визуализации сложного 3D-материала, также, используя DX Api под C#, немного сложнее (хотя и не так сложно).

0

Посмотрите на Управляемые Direct3D графики API в .NET Source

13

Вот простой пример кода, который поможет вам начать работу (предполагается, что у вас есть 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 покажет вам как их назвать.

Смежные вопросы