Entwickler-Ecke

Multimedia / Grafik - Farbverlauf mit setpixel und getpixel in C#


Soier - Mo 20.10.14 20:45
Titel: Farbverlauf mit setpixel und getpixel in C#
Hi

bin neu was C#, habe aber erfahrung in programmieren von konsolen anwendungen in c und c++.

Also Aufgabe ist Farbverläufe zu programmieren mit setpixel und getpixel und zwar von Schwarz->Rot,Schwarz->Blau, Schwarz->Grün,Rot->Grün->Blau.

So meine logik ist die. Ich erstelle für jeden Verlauf einen Button.

im code erstelle ich im button eine bitmap die 256 pixel lang ist. anschliessend mache ich eine schleife die beim ersten pixel anfängt und diesen mit den aRGB werten (255,0,0,0) füllt nachdem durch gang ein pixel weiter und einen rgb wert erhöht zb 255,1,0,0 um so einen verlauf von schwarz zu rot zu generien. zum schluss gebe ich die bitmap in einer picturebox aus. Also das wäre meine logik die auch plausibel erscheint. allerdings bin ich wie gesagt neu in c# bzw allgemein im grafischen programmieren. wäre schön wenn mir einer die entsprechende syntak posten könnte würde auch riechen wenns nur für einen farbverlauf ist schwarz zu rot zum beispiel

danke im vorraus

mfg Soier


Soier - Mo 20.10.14 23:14

okay hab die farbverläufe soweit nur von rot->grün->blau hab ich noch net


C# - Di 21.10.14 08:21

Hallo.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
   private void DrawBrush(Bitmap bmp, Point startPoint, Point endPoint, Color startColor, Color endColor)
      {
          float len = endPoint.X - startPoint.X;

          float deltaRed = (endColor.R - startColor.R) / len;
          float deltaGreen = (endColor.G - startColor.G) / len;
          float deltaBlue = (endColor.B - startColor.B) / len;

          float r = startColor.R, g = startColor.G, b = startColor.B;


          for (int x = startPoint.X; x < endPoint.X; x++)
          {
              r += deltaRed;
              g += deltaGreen;
              b += deltaBlue;

              for (int y = startPoint.Y; y < endPoint.Y; y++)
              {
                  bmp.SetPixel(x, y, Color.FromArgb((int) r, (int) g, (int) b));
              }
          }
      }

        private void button1_Click(object sender, EventArgs e)
        {
            Bitmap img = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            DrawBrush(img, new Point(00), new Point(img.Width / 2, img.Height), Color.Red, Color.Green);
            DrawBrush(img, new Point(img.Width / 20), new Point(img.Width, img.Height), Color.Green, Color.Blue);
            pictureBox1.Image = img;
        }

Hier ein Codebeispiel wie es fnktionieren sollte. Da könntest du jetzt auch beliebig viele Farbverläufe hintereinander hängen.