Entwickler-Ecke
WinForms - Pixel in pictureBox färben
Jakob_Ullmann - So 20.09.09 13:35
Titel: Pixel in pictureBox färben
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.
Jakob_Ullmann - 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 - 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 - 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!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!