Einzelnen Beitrag anzeigen

Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#13

Re: Verlauf mit "gewichteter" Farbe mittels Log?

  Alt 5. Apr 2009, 09:33
Ich hab die die wichtigen Teile nochmal kommentiert
Code:
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        { 
            double pos = 0; // Position entlang der Paintbox/Picturebox im Intervall 0..1
            double amount = 0; // Menge der ersten Farbe - soll also von links 1 (= 100%) nach rechts 0 werden
            Color tempColor; // Wird die Farbe enthalten, an der Position an der wir gerade sind
            Pen myPen = new Pen(col1); // Braucht man in Delphi nicht

            for (int i = 0; i < pictureBox1.Width; i++)
            { 
                pos = (double)i / (pictureBox1.Width - 1);
// pos errechnen. Wenn i = 0 dann pos = 0 Wenn i = (Width-1) dann pos = 1 

                amount = 1 - Math.Pow(pos, potenz);
// Menge der Farbe ausrechnen. Dazu potenzieren wir die Position (Intervall 0..1) mit der Potenz.
// Es kommt garantiert wieder etwas aus dem Intervall 0..1 raus.
// Da die Position von 0 nach 1 läuft, nehmen wir 1 - Math.pow() um die Menge der ersten Farbe rauszubekommen.
                tempColor = MixColors(col1, col2, amount);
// Mischt die beiden Farben zusammen. Code siehe unten
                myPen.Color = tempColor;
// Farbe merken
                e.Graphics.DrawLine(myPen, new Point(i, 0), new Point(i, pictureBox1.Height - 1));
// Und eine vertikale Linie an der Position zeichnen an der wir gerade sind.
// (Wir bewegen uns horizontal und zeichnen dann immer eine 1px breite Linie von oben nach unten)
            } 
        } 

        private Color MixColors(Color col1, Color col2, double amount)
        { 
            if (amount < 0 || amount > 1)
                throw new ArgumentOutOfRangeException("amount");
// Bitte tauschen Sie die FPU oder den Programmierer aus - einer von beiden macht Mist :-P

            byte R = (byte)(col1.R * amount + col2.R * (1 - amount));
            byte G = (byte)(col1.G * amount + col2.G * (1 - amount));
            byte B = (byte)(col1.B * amount + col2.B * (1 - amount));
// Farben einzeln Mischen. Farbe := Farbe1 mal Menge + Farbe2 mal (1 - Menge)
            return Color.FromArgb(R, G, B);
        }
Ich hoffe das ist verständlich
  Mit Zitat antworten Zitat