Benutzer mit den meisten Antworten
Speziellen Farbverlauf berechnen

Frage
-
Guten Tag, ich habe die Aufgabe bekommen eine Art Farbkreis auf eine Form zu malen. Der äußerste Ring soll in etwa so aussehen:
http://upload.wikimedia.org/wikipedia/de/thumb/1/11/Komplement%C3%A4r.png/220px-Komplement%C3%A4r.png
So soll es sich dann bis zur Mitte hin ziehen.Ich kenne die Grundlagen, wie man auf Forms zeichnet, also OnPaint, Invalidate, Graphics, ...
Mein Problem ist die Berechnung, wo kommt welche Pixelfarbe hin? Ich brauche da mal ein paar Tipps. Ich versuchte in 2 verschachtelten for-Schleifen das zu erzeugen, aber dann fehlt immer noch die Berechnung.
An sich soll es kein Kreis werden, sondern ein Quadrat, welches bis zu den Kanten gefüllt ist, das sollte aber nicht viel anders funktionieren.
Da ich nach Stundenlangem intensivem Suchen nichts im Internet gefunden habe bitte ich nun um eure Hilfe. Ich bedanke mich schonmal für jeden Tipp.
Antworten
-
Hi,
hier mal eine Demo. Die gewünschte Farbverteilung musst Du aber erst einmal vorgeben:private void Form1_Paint(object sender, PaintEventArgs e) { int zeilen = 255; int spalten = 255; Bitmap bmp = new Bitmap(spalten, zeilen); Rectangle lockRegion = new Rectangle(0, 0, spalten, zeilen); BitmapData data = bmp.LockBits(lockRegion, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); unsafe { byte* p; for (int spalte = 0; spalte < spalten; spalte++) { for (int zeile = 0; zeile < zeilen; zeile++) { p = (byte*)data.Scan0 + (zeile * data.Stride) + (spalte * 3); p[0] =(byte)spalte; //B pixel p[1] = (byte)zeile; //G pixel p[2] = (byte)( zeilen - zeile); //R pixel } } } bmp.UnlockBits(data); e.Graphics.DrawImage(bmp, 0, 0); }
--
Viele Gruesse
Peter- Als Antwort vorgeschlagen Peter Fleischer Mittwoch, 2. Januar 2013 09:46
- Als Antwort markiert Ionut DumaModerator Freitag, 11. Januar 2013 16:11
Alle Antworten
-
Hi,
hier mal eine Demo. Die gewünschte Farbverteilung musst Du aber erst einmal vorgeben:private void Form1_Paint(object sender, PaintEventArgs e) { int zeilen = 255; int spalten = 255; Bitmap bmp = new Bitmap(spalten, zeilen); Rectangle lockRegion = new Rectangle(0, 0, spalten, zeilen); BitmapData data = bmp.LockBits(lockRegion, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); unsafe { byte* p; for (int spalte = 0; spalte < spalten; spalte++) { for (int zeile = 0; zeile < zeilen; zeile++) { p = (byte*)data.Scan0 + (zeile * data.Stride) + (spalte * 3); p[0] =(byte)spalte; //B pixel p[1] = (byte)zeile; //G pixel p[2] = (byte)( zeilen - zeile); //R pixel } } } bmp.UnlockBits(data); e.Graphics.DrawImage(bmp, 0, 0); }
--
Viele Gruesse
Peter- Als Antwort vorgeschlagen Peter Fleischer Mittwoch, 2. Januar 2013 09:46
- Als Antwort markiert Ionut DumaModerator Freitag, 11. Januar 2013 16:11
-
Hallo XD3000,
Der Beitrag von Peter beantwortet m.E. deine Frage. Bitte markiere ihn als Antwort, wenn es das ist, wonach Du gesucht hast.
Die häufigste Ursache für das Nichtauffinden von Inhalten im Internet ist die Verwendung von falschen Suchbegriffen. Die relevanten Suchbegriffe für deine Fragestellung sind: "color space" (Farbraum) bzw. "color picker" (Farbauswahl-Dialog) oder "color wheel" (Farbkreis). Dazu gibt es im Netz sehr viele Beispiele. Du mußt nur wissen, welchen Farbraum Du wie verwenden möchtest.
Für den Einstieg empfehle ich den Artikel Building a Color Picker User Control with GDI+ von Ken Getz. Dort wird u.a. anhand der Klasse ColorWheel erklärt, wie man ein Control zur kombinierten Anzeige des HSB/RGB-Farbraums entwickelt. Ein C#/VB.NET-Code-Download ist ebenfalls vorhanden.
Gruß
Marcel- Bearbeitet Marcel RomaModerator Mittwoch, 2. Januar 2013 11:40