2009-08-19 15 views
14

Po prostu chcę narysować proste obiekty 2D, takie jak koło, linia, kwadrat itp. W języku C#. Jak mogę to zrobić? Po powrocie do Turbo w C++ pamiętam, jak zainicjowałem bibliotekę graficzną, robiąc to samo. Czy muszę zrobić coś podobnego w .NET? Czy jest inaczej w przypadku obiektów 3D? Czy rzeczy takie jak DirectX czynią to łatwiejszym? Wszelkie linki do samouczków lub próbek bardzo doceniane.Jak narysować prostą grafikę w C#?

Odpowiedz

16

Jak mówili inni, sprawdź System.Drawing. (Powtarzam to tylko dla kompletności). System.Drawing udostępnia bibliotekę rysunków systemu Windows GDI+ aplikacji.

Dobry samouczek do rozpoczęcia pracy z System.Drawing i GDI + można znaleźć pod adresem C# Corner.

Kilka ważnych elementów Uwaga:

  1. Wiele GDI + obiekty wdrożyć IDisposable interfejs, a zatem powinny być opakowane w using bloków. Upewnij się, że postępujesz zgodnie z odpowiednimi konwencjami dotyczącymi usuwania; nieudane wyrzucenie obiektów GDI + może spowodować naprawdę nieprzyjemne efekty uboczne dla twojej aplikacji. (Obiekty GDI + w .NET odpowiadają ich bazowym odpowiednikom Windows API.)
  2. Interfejsy API, takie jak DirectX, są niezwykle złożone i nie bez powodu. Zostały zaprojektowane nie dla prostych kształtów, ale raczej dla złożonych, wysoce wydajnych i wysoce interaktywnych aplikacji multimedialnych. (Innymi słowy, gry zazwyczaj). Możesz uzyskać dostęp do DirectX poprzez interfejsy Managed DirectX, ale znowu, to prawdopodobnie przesada do twoich bezpośrednich celów.
  3. Jeśli interesuje Cię łatwiejszy sposób pracy z DirectX, to jest to droga, którą należy przejść. Jednak jest to bardzo specyficzna biblioteka do gier i znowu może to być przesada. Trochę spóźniłem się na imprezę, ale zgodnie z komentarzami poniżej, to już nie jest obsługiwane. (To ma sens, nie słyszałem o tym od lat.)
+4

"Zgodnie z wiadomością e-mail wysłaną w dniu 31 stycznia 2013 r. ** XNA nie jest już aktywnie rozwijany ** i nie jest obsługiwany w nowych warstwach" Metro interface "systemu Windows 8 ani na platformie Windows RT." [Cytat z Wikipedii] (https://en.m.wikipedia.org/wiki/Microsoft_XNA) – klaas

+0

Może spojrzeć na [unity3d] (http://unity3d.com) ma dobre samouczki i bezpłatną licencję indie/osobistą. Lub sprawdź to [reddit] (https://www.reddit.com/r/gamedev/comments/1et2li/c_game_engines_other_than_xnamonogame/) – klaas

+0

Nie polecam GDI + ani System.Drawing Jestem tutaj, ponieważ FillRectangle jest zbyt wolny, a to Powoli nazywa bazowy SafeNativeMethods GDI + (Gdip) FillRectangle zbyt wolno, aby był przydatny. to jest 2017 i walczę z prostą funkcją standardową FillRectangle, żartujesz sobie ze mnie. – hamish

0

trzeba użyć GDI +.

Sposób, w jaki to robisz, zależy w niewielkim stopniu od tego, co chcesz narysować. Możesz rysować na formancie lub formularzu lub rysować na obiekcie obrazu. Tak czy inaczej, potrzebujesz obiektu System.Drawing.Graphics, który moim zdaniem znajduje się w pliku System.Drawing.dll.

Możesz utworzyć nową klasę Bitmap i wywołać Graphics.FromImage (myImage), a następnie narysować za pomocą metod na nowo utworzonym obiekcie grafiki. Jeśli chcesz narysować na formularzu lub sterowaniu, po prostu nadpisaj metodę OnPaint i wyszukaj właściwość Graphics w klasie EventArgs.

Więcej informacji na temat nazw System.Drawing tutaj: http://msdn.microsoft.com/en-us/library/system.drawing.aspx

+0

Nie można utworzyć wystąpienia nowego obrazu, ale można instancji nową bitmapę. – MusiGenesis

+0

Ach tak, dzięki za wyjaśnienia. Wiedziałem o tym, ale zapomniałem. –

2

Przeczytaj o GDI, GDI +, System.Drawing nazw, na przykład here.
DirectX nie jest czymś, czego można użyć do rysowania prostych kształtów, raczej renderowania skomplikowanych rzeczy 3D, a także, używając DX Api pod C# jest nieco trudniejsze (choć nie takie trudne).

13

Oto prosty przykładowy kod, który będzie Ci zacząć (zakłada masz PictureBox nazwie 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; 

Grafiki obiekt ma kilka innych metod rysunkowych i Intellisense pokaże, jak do nich zadzwonić.

0

GDI + użyciu System.Drawing

Powiązane problemy