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
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:
- 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.) - 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.
- 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.)
Zapoznaj się z nazw System.Drawing: http://msdn.microsoft.com/en-us/library/system.drawing.aspx
Spójrz na System.Drawing Namespace
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
Nie można utworzyć wystąpienia nowego obrazu, ale można instancji nową bitmapę. – MusiGenesis
Ach tak, dzięki za wyjaśnienia. Wiedziałem o tym, ale zapomniałem. –
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).
Look dla Managed graficznym API Direct3D w .NET Source
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ć.
GDI + użyciu System.Drawing
- 1. Jak narysować koło kolorów w obiektyw-c
- 2. Renderuj grafikę wektorową (.svg) w języku C++
- 3. Jak narysować świece w C#
- 4. Jak wyrównać grafikę w iTextPDF?
- 5. Jak narysować wykres funkcji w WPF?
- 6. Jak utworzyć prostą krótką wartość skrótu? C#
- 7. Jak narysować na ekranie w języku C++?
- 8. Jak odróżnić grafikę od fotografii?
- 9. Javascript: Jak narysować prostą linię na płótnie (w 3d) i uczynić ją obrotową (w 3d)?
- 10. Dodaj grafikę w przycisku WPF
- 11. Jak narysować tekst na płótnie?
- 12. Angular2 - Jak stworzyć prostą tabelę
- 13. Jak wykonać prostą matematykę w szablonie Meteora?
- 14. Jak wysłać prostą odpowiedź json w Rails?
- 15. iOS - MPMediaItem Wyświetlaj domyślną grafikę
- 16. Jak narysować tekst w niestandardowym widoku przy użyciu Objective-C?
- 17. Jak rysować grafiki w języku C# bez formularza
- 18. Jak narysować tło w openGL
- 19. jak narysować półkole w Android
- 20. Jak narysować wykres w PHP?
- 21. Jak narysować linię w VIM?
- 22. Jak narysować siatkę w SketchFlow?
- 23. Jak narysować Geosphere w Matlab?
- 24. Jak narysować połączenie w Dia?
- 25. Jak wyczyścić grafikę na przezroczystym sterowaniu w formularzach okienkowych
- 26. Jak zaimplementować grafikę HD "Retina Display" w Cocos2D
- 27. Jak wyświetlić grafikę wektorową (SVG) w aplikacji Windows Forms?
- 28. Jak wykonać tę prostą funkcję ciągów "pythonic"
- 29. Jak narysować kontekst graficzny NSView z poziomu wywołania zwrotnego CVDisplayLink?
- 30. Jak narysować elementy potomne kompozytów w SWT?
"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
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
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