Autor |
Beitrag |
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: So 20.09.09 13:35
Hallo!
Ich habe jetzt mal wieder Visual C# installiert und habe versucht, ein bisschen zu malen. Versuch: Gradienz. Als Anfänger durchblicke ich noch nicht so ganz die Zusammenhänhe von pictureBox.Image, Graphics und Bitmap. Ich habe es erst einmal mit Rechtecken probiert, was natürlich langsam ist:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| private void button1_Click(object sender, EventArgs e) { Graphics MyGraph = Graphics.FromHwnd(pictureBox1.Handle); for (int i = 1; i <= 80; i++) { for (int j = 1; j <= 80; j++) { MyGraph.DrawRectangle(new Pen(Color.FromArgb(255, 2 * i + j, 0, 255)), new Rectangle(i, j, 1, 1)); } } } |
Scheinbar gibt es dafür nur Bitmap.SetPixel. Allerdings würde mich jetzt mal interessieren, wie ich auf einem Bitmap zeichne und wie ich es dann in eine pictureBox übertrage, bzw. wozu ich dann eigentlich Graphics brauche.
Leider weiß ich noch nicht, was so die hilfreichen Seiten für C# sind, habe die Online-Hilfe (MSDN) und das Open Book Visual C# 2008, Galileo Computing durchsucht und hab nichts brauchbares gefunden.
|
|
gfoidl
      
Beiträge: 157
Erhaltene Danke: 19
Win XP
C#, Fortran 95 - Visual Studio
|
Verfasst: So 20.09.09 14:15
Hallo,
die Zeichenlogik in .net kehrt sich um. Windows bestimmt was wann gezeichnet werden soll.
Eine sehr gute Einführung bietet: Zeichnen in Windows-Programmen (Paint/OnPaint, PictureBox)
Für Gradienz gibt speziell den GradientBrush. Aber lies der erstmals den obigen Link durch.
mfG Günther
_________________ Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!
|
|
Jakob_Ullmann 
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: So 20.09.09 14:30
Dort verstehe ich nicht sehr viel. Was ist denn bitte das _listgo, was der Autor verwendet?
EDIT: Also ich verstehe schon, was der Autor mit _listgo machen will. Aber was muss ich vorher machen, wie muss ich _listgo deklarieren?
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: So 20.09.09 15:07
Wenn du nicht per Graphics direkt auf die Form zeichnen, sondern ein Bitmap im Hintergrund halten willst (was du eben für pixelweisen Zugriff brauchst), kannst du dir OnPaint sparen:
herbivore hat folgendes geschrieben: | Wenn man PictureBoxen verwendet (und nur dann , kann man im Prinzip alles vergessen, was ich bisher gesagt habe. |
Also:
- Bitmap erzeugen
- Manipulieren: Für halbwegs schnellen Zugriff Get/SetPixel, für sauschnellen LockBits, für komplexere Formen Graphics.FromImage
- PictureBox.Image zuweisen
_________________ >λ=
|
|
Jakob_Ullmann 
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: So 20.09.09 15:24
Hey cool, das funktioniert.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| private void button1_Click(object sender, EventArgs e) { Bitmap myBmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); for (int i = 1; i <= 50; i++) { for (int j = 1; j <= 50; j++) { myBmp.SetPixel(i, j, Color.FromArgb(255, 4 * i, 4 * j, 255)); } } pictureBox1.Image = myBmp; } |
Vielen Dank für die Hilfe!
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: So 20.09.09 16:38
GetPixel und SetPixel sind relativ langsame Operationen, besonders in Schleifen.
Als Alternative gibt es andere Möglichkeiten, z.B. www.mycsharp.de/wbb2...d.php?threadid=29667
oder
www.mycsharp.de/wbb2...d.php?threadid=59354
|
|
|