CentrumXP.pl » Witamy
CentrumXP.pl
 
Szukaj
Subskrypcja
Powiadomienie e-mailem o nowościach na CentrumXP.pl:
E-mail: Zapisz
Czy zamierzasz pobrać Internet Explorer 9?


CentrumXP.pl » Microsoft .NET » Visual C# w praktyce » Dodaj do ulubionych Dodaj do ulubionych   Dodaj do ulubionych Wersja do wydruku

Mini Paint w C#

Autor: Marcin Hałaczkiewicz    Opublikowano: 1 czerwca 2006    Odsłon: 87535    »Skomentuj...
Strona:
Zobacz również:

Analogowy zegarek

Budzik w C#

Commander w C#

Kalkulator w C#

Komunikator w C#

Notatnik w C#

Przeglądarka internetowa w C#

Przeglądarka zdjęć w C#

Przetwarzanie obrazów

Snake w C#

Tetris w C#

Wygaszacz ekranu w C#

»Uzyskaj pomoc na forum

Tym razem napiszemy prostą aplikację w stylu MS Paint. Zapoznamy się z podstawowymi metodami rysowania w .NET. Program będzie umożliwiał proste malowanie, zmianę koloru pędzla a także zapisanie efektu do pliku bmp. Nauczymy się korzystać z wbudowanych w .NET okienek dialogowych do wybierania koloru oraz zapisu.

Jak zwykle zaczniemy od stworzenia nowego projektu. Nadajemy mu nazwę Mini Paint, zmieniamy nazwę pliku z formą na MiniPaint.cs i nadajemy jej nazwę frmMiniPaint. Następnie zmieniamy jej właściwości: AutoSizeMode na GrowAndShrink, MaximizeBox na false - dzięki temu nie będziemy mogli zmaksymalizować ani zmienić wielkości formy. Rozmiar (Size) proponuje ustawić na 514x478. Do formy dodajemy Panel. Lokujemy go w pozycji 20x20 i ustawiamy Size na 400x400, po czym zmieniamy BackColor na White, jeszcze tylko musimy ustawić właściwość BorderStyle na FixedSingle - aby nasze 'płótno' było obramowane. Następnie dodajemy PictureBox do panelu (wystarczy kliknąć z wybranym pictureboxem na panel). Jego położenie to 0x0, rozmiar: 400x400, nazwa: imgObrazek. Następnie dorzucamy 3 przyciski (button) i nazywamy je kolejno: cmdZapisz, cmdCzysc i cmdKolor. Później tworzymy etykietę i nadajemy jej nazwę lblKolor, czyścimy pole Text, ustawiamy BackColor na Black, AutoSize na false oraz Size na 23x23. Kontrolka ta posłuży nam do wyświetlania aktualnego koloru. Po wszystkich operacjach okno programu powinno wyglądać mniej więcej tak:

Zajmijmy się oprogramowywaniem funkcji aplikacji. Chcielibyśmy, aby z wciśniętym lewym przyciskiem myszy można było rysować. Zacznijmy od dodania do formy kilku zmiennych (widok kodu formy). Dopiszmy:

private Graphics g;
private Point p = Point.Empty;
private Pen pioro;

Pierwsze pole posłuży do reprezentowania grafiki i rysowania jej. Drugie to zmienna pomocnicza służąca do kreślenia linii pomiędzy punktem, w którym była ostatnio myszka (to jest właśnie p) a punktem, w którym znajduje się aktualnie. Zmienna pioro będzie reprezentować pióro o kolorze, w którym malujemy. Zmienne te inicjujemy w konstruktorze formy frmMiniPaint(). Oto jego kod:

public frmMiniPaint();
{
InitializeComponent();
imgObrazek.Image = new Bitmap(400, 400);
g = Graphics.FromImage(imgObrazek.Image);
pioro = new Pen(Color.Black);
}

Po zadeklarowaniu ww. wartości tworzymy obsługę zdarzenia MouseDown dla kontrolki imgObrazek. W jego wnętrzu wpisujemy:


1 2 3 Dalej» 

Aktualna ocena to: 4,35

Oceń artykuł...
Porażka Kiepski Taki Sobie Dobry Super!

Tagi:  

A teraz:    Dodaj do ulubionych Dodaj do ulubionych    Wydrukuj Wydrukuj    Wyślij link znajomemu Wyślij link znajomemu    Skomentuj Skomentuj

Komentarze do Mini Paint w C#

Dodaj komentarz»

Mirek 1 czerwca 2006, 3:32

Co to znaczy, że do formy dodajemy Panel ?

Mirek 1 czerwca 2006, 3:35

W Toolboxie znalazłem Panel, więc pewnie to o to chodzi ...

m010ch 6 czerwca 2006, 0:29

Zapomniałeś opisać zawartości głównej funkcji projektu frmMiniPaint(), przez co program nie ma prawa działać i nie działa (obiekty g i pioro nie zostają zainicjalizowane). Fragment ten jest w kodzie, który udostępniłes, ale nie ma go w tutorialu. Jeżeli chodzi o opis bez tego małego zgrzytu, to bardzo przystępnie przedstawiony :) Oby tak dalej!

Marcin Hałaczkiewicz 6 czerwca 2006, 1:10

Już poprawione. Dziękuję za info. Ciesze się, że się podoba :) Wszelkie uwagi mile widziane.

adrian 23 sierpnia 2006, 17:59

sorry ale niewiem gdzie jest "AutoSizeMode" ten przycisk mugłbyś załączyc obrazki do karzdej operacjitak jak to jest przectawione w kurs c# pozdro ;">

Adam 28 sierpnia 2006, 21:48

Adrian: to nie jest przycisk tylko wlasciwosc glownej formy. Uaktywnij ja (kliknij na nia) i w Properties bedziesz mial cala liste wlasciwosci a tam miedzy innymi ta ktorej nie mozesz znalezc.

Anna 23 maja 2007, 20:33

Tutorialek super :) Mam pytanie: jak zrobić takiego Mini Painta, żeby rysował linie proste (tak jak w Paincie w Windowsie)?

Znak 31 maja 2007, 17:11

Jak dodać gumke do tego projektu??

Daga 24 czerwca 2007, 16:20

Ściągłam Twój program i odrazu wyrzuciło mi takie komunikaty w Visual studio 2005. Dlaczego u mnie nie chodzi :( Error 1 "System.Windows.Forms.Panel" does not contain a definition for "Image" C:\Documents and Settings\rympel!\Moje dokumenty\Visual Studio 2005\Projects\MiniPaint.cs\MiniPaint.cs\Form1.cs 29 28 MiniPaint.cs Error 2 The name "g" does not exist in the current context C:\Documents and Settings\rympel!\Moje dokumenty\Visual Studio 2005\Projects\MiniPaint.cs\MiniPaint.cs\Form1.cs 35 13 MiniPaint.cs Error 3 The name "pioro" does not exist in the current context C:\Documents and Settings\rympel!\Moje dokumenty\Visual Studio 2005\Projects\MiniPaint.cs\MiniPaint.cs\Form1.cs 45 13 MiniPaint.cs

kamas 13 lipca 2007, 11:18

Odpowiedź na pytanie Anny: dodaj zdarzenie MouseUp dla imgObrazek i wpisz kod zdarzenia MouseMove. Wtedy linia będzie rysowana dopiero po zwolnieniu przycisku myszy. Trzeba tylko zadbać aby zdarzenia MouseMove i MouseUp wzajemnie się wykluczały, ale to już nie stanowi problemu.

zniechecony 29 sierpnia 2007, 21:51

Nasłuchałem się tyle o tej wspaniałej .NET a tutaj taka kicha. Mam do napisania interface do gierki w której dzieci będą sobie badać coś tam z mużdżkiem. Ogarnołem sobie już co trzeba i powiem państwu że jeśli chcecie poważnie zabrać się za grafikę to tylko przesiadka na c++ i GTK(polecam) albo ew. Qt4. Obie biblioteki oferują nieporównywalnie większe możliwości do .net z tym że ja rozumiem że ktoś może być postkomunistą i wolne oprogramowanie budzi u niego raczej niechęć. Przepraszam że tak wylewam swoje boleści, ale wydałęm na podręcznik do c# i czuje się oszukany przez "machinę marketingową".

Rokamak 21 września 2007, 22:36

@zniechecony: no ale chyba nie próbowałeś Windows Graphics Foundation tam można nawet obracać buttony :P

xmass 17 grudnia 2007, 23:49

witam ma pytanie jak dodac funkcje pisania do projektu ?? bylbym wdzieczny za wszelka pomoc pozdrawiam

arwo 4 lutego 2008, 20:40

jak dodac rysowanie figur?

arwo 3 maja 2008, 14:32

jak nie dodawac rysowanie figur?

Kiki 21 maja 2008, 23:16

Dziękuję bardzo bardzo bardzo :*

ja 8 czerwca 2008, 15:55

nie wiem dlaczego ale wyskakuje mi blad ze "System.Windows.Forms.PaintEventArgs" does not contain a definition for "Location" i to sqamo dla button

Defozo 2 lipca 2008, 20:10

@ja - Mi też to samo wyskakuje... Co robić?

-=_=- 9 stycznia 2009, 12:20

Zamiast p = e.Location;
należy napisać p.X = e.X; p.Y = e.Y;
podobnie zamiast g.DrawLine(pioro, p, e.Location);
należy napisać g.DrawLine(pioro, p.X, p.Y, e.X, e.Y);
 
Ale generalnie baaaardzo mi ten przykłąd pomógł.

GieeLACeHa 23 stycznia 2009, 12:39

Jak utworzyć funkcję wczytywania pliku do naszego mini painta... Skoro zapisujemy chcili byśmy czasem sobie to zedytować nieprawdaż??

sds 13 lutego 2009, 20:37

Jak zrobić tą etykiete

pawel 27 lutego 2009, 8:49

Jak narysować linię prostą i prostokąt zeby wyglądalo to tak jak w normalnym windowsowym Paincie?

Norbert 26 kwietnia 2009, 13:43

@sds
 
poszukaj "label" w toolboxie. Przeciagnij i upusc na forme.

zapytacz 29 czerwca 2009, 18:05

jak zrobic opcje wiaderko??
chodzi o to że jak sie narysuje figurę to żeby można było ją wypelnić...

? 12 sierpnia 2009, 20:27

a czemu program zapisuje tak że po otwarciu bmp-ka jest cały czarny obrazek, nie ma żadnych kolorów tylko CZERŃ!

jj 27 sierpnia 2009, 14:18

daj na poczatek to co jest w przyciku czysc to bedziesz miec biale tlo ;p a wie ktos jak te funkcje dac pod przycisk? zeby np po kliknieciu buttona rysowal jak pioro a po kliknieciu na inny przycik zeby rysowal linie...

mrx 9 stycznia 2010, 18:08

Dziekuję za super przykład!!

Bartekkknh 7 lutego 2010, 14:50

Mam pytanie, jak zrobić aby pióro było grubsze?? Załózny kwadrat (2x2) bo chce zrobić gumkę ^

maciek32 25 marca 2010, 15:19

Aby pioro bylo grubsze piszesz: pioro.Width = ;

narf 29 listopada 2010, 14:15

Witam. załóżmy ze tworze sobie obiekt typu PictureBox w jakiejs metodzie. Jak dodać ten PictureBox do Panelu?


Dodaj swój komentarz

»Zasady udzielania komentarzy

Autor:  
Komentarz:
Dodaj komentarz
© 2012 Onex Group
Onex Group O Onex Group  |  O CentrumXP.pl  |  Kontakt  |  Reklama
Nasze serwisy: CentrumXP.plXboxSpot.pl  |  Jama Mastaha