aus Prozentwert Farbwert ermitteln
Hallo,
ich möchte gerne aus einem übergebenen Prozentwert (o bis 100) einen Farbwert ermitteln. 0 sollte rot sein und 100 sollte grün sein. Ich weiß nicht genau, wie ich die Abstufungen hinbekomme. Ich kann ja unmöglich 100 switch case Anweisungen machen. Gibt es da einen anderen Weg? Google gibt leider auch nichts vernünftiges raus, oder ich suche falsch
danke schon mal
ich möchte gerne aus einem übergebenen Prozentwert (o bis 100) einen Farbwert ermitteln. 0 sollte rot sein und 100 sollte grün sein. Ich weiß nicht genau, wie ich die Abstufungen hinbekomme. Ich kann ja unmöglich 100 switch case Anweisungen machen. Gibt es da einen anderen Weg? Google gibt leider auch nichts vernünftiges raus, oder ich suche falsch
danke schon mal
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 96898
Url: https://administrator.de/contentid/96898
Ausgedruckt am: 22.11.2024 um 17:11 Uhr
6 Kommentare
Neuester Kommentar
ich möchte gerne aus einem übergebenen Prozentwert
(o bis 100) einen Farbwert ermitteln. 0 sollte rot
sein und 100 sollte grün sein.
(o bis 100) einen Farbwert ermitteln. 0 sollte rot
sein und 100 sollte grün sein.
Und dazwischen? Willst du den Weg über blau und violett gehen oder über orange und gelb? Oder einen direkten Rot-zu-Grün-Farbverlauf? Du mußt ja erst mal einen Algorhythmus entwicklen, der die linearen Werte von 0 bis 100 in die dreidimensionale RGB-Farbskala umsetzt.
Hallo,
ich weiß nicht, ob da etwas taugliches rauskommt. Aber versuchen würde ich mal folgendes:
Farbangaben können ja in RGB gemacht werden (Rot, Grün, Blau), damit bieten sich die von dir gewählten Farben ja an. Im allgemeinen kann jeder Farbwert von 0-255 annehmen. Blau ignorieren wir jetzt erstmal. Dann kannst du einfach rechnen:
0% sollen Rot entsprechen, also R:255, G:0
100%: R:0, G:255.
50%: von jeder Farbe 50% des Maximalwerts, also R:255*0,5, G:255*0,5.
30%: 70% Rot, also 255*0,7, 30% Grün, also 255*0,3
Blau würde dabei erstmal außer Acht gelassen. Das könnte man einfach auf etwa 126 setzen, damit die Farben nicht zu dunkel sind, evtl muss man da noch etwas mehr Berechnungen machen (z.B. für 50% etwa auf voll setzen, für 0% und 100% auf null setzen, dazwischen irgendeine Hüllkurve).
Gruß
Filipp
Edit: Nur um das deutlich zu machen: Das ist ein Ansatz ohne Switch, sondern zum Rechnen:
Rot = 255 * (1-Prozent)
Grün = 255 * Prozent
Prozent als Zahlenwert angegeben, also 100% = 1
ich weiß nicht, ob da etwas taugliches rauskommt. Aber versuchen würde ich mal folgendes:
Farbangaben können ja in RGB gemacht werden (Rot, Grün, Blau), damit bieten sich die von dir gewählten Farben ja an. Im allgemeinen kann jeder Farbwert von 0-255 annehmen. Blau ignorieren wir jetzt erstmal. Dann kannst du einfach rechnen:
0% sollen Rot entsprechen, also R:255, G:0
100%: R:0, G:255.
50%: von jeder Farbe 50% des Maximalwerts, also R:255*0,5, G:255*0,5.
30%: 70% Rot, also 255*0,7, 30% Grün, also 255*0,3
Blau würde dabei erstmal außer Acht gelassen. Das könnte man einfach auf etwa 126 setzen, damit die Farben nicht zu dunkel sind, evtl muss man da noch etwas mehr Berechnungen machen (z.B. für 50% etwa auf voll setzen, für 0% und 100% auf null setzen, dazwischen irgendeine Hüllkurve).
Gruß
Filipp
Edit: Nur um das deutlich zu machen: Das ist ein Ansatz ohne Switch, sondern zum Rechnen:
Rot = 255 * (1-Prozent)
Grün = 255 * Prozent
Prozent als Zahlenwert angegeben, also 100% = 1
Hallo,
übrigens habe ich keine Ahnung, wie du auf die Idee kommst, eine Suchmaschine würde nichts vernünftiges liefern. "farbverlauf berechnen" ergibt auf der ersten Seite jede Menge. Z.B. ein PHP-Tutorial: http://www.sansiba.de/tut_farbverlauf.htm und auch jede Menge weitere Diskussionen und Tutorials dazu. Interessanter Ansatz über Farbkreise z.B. http://www.pepto.de/projects/colorvic/
Gruß
Filipp
übrigens habe ich keine Ahnung, wie du auf die Idee kommst, eine Suchmaschine würde nichts vernünftiges liefern. "farbverlauf berechnen" ergibt auf der ersten Seite jede Menge. Z.B. ein PHP-Tutorial: http://www.sansiba.de/tut_farbverlauf.htm und auch jede Menge weitere Diskussionen und Tutorials dazu. Interessanter Ansatz über Farbkreise z.B. http://www.pepto.de/projects/colorvic/
Gruß
Filipp
Hi Closed,
der Ansatz von filipp ist doch zum Probieren schon mal ganz gut:
Der hundertste Teil von 255 ist 2,55, also die Abstufung je Prozentpunkt.
Wenn du nun einen Prozentwert 75% übergibst, so erhält Grün die 75x2,55 und
Rot 25x2,55. Kommazahlen sind natürlich schlecht, die Ergebnisse werden mit
round gerundet. Aus den Ergebnissen läßt du dir mit der Funktion sprintf die
Hex-Schreibweise für die HTML-Ausgabe erstellen. Einfaches Beispiel:
Gruß
Günni
der Ansatz von filipp ist doch zum Probieren schon mal ganz gut:
Der hundertste Teil von 255 ist 2,55, also die Abstufung je Prozentpunkt.
Wenn du nun einen Prozentwert 75% übergibst, so erhält Grün die 75x2,55 und
Rot 25x2,55. Kommazahlen sind natürlich schlecht, die Ergebnisse werden mit
round gerundet. Aus den Ergebnissen läßt du dir mit der Funktion sprintf die
Hex-Schreibweise für die HTML-Ausgabe erstellen. Einfaches Beispiel:
<form action="" method="post">
<input type="text" name="input"/>
<input type="submit" name="cmd"/>
</form>
<?
$schritt=2.55;
if(isset($_POST['cmd'])){
$gruen=$_POST['input'];
$rot=100-$gruen;
$color=sprintf("#%02X%02X00",round($rot*$schritt),round($gruen*$schritt));
echo "<h3><font color=$color>Text</font></h3><br><br>";
}
//Gesamter Farbverlauf
$i=0;
for($rot=100,$gruen=0;$rot>=0,$gruen<=100;$rot--,$gruen++){
$fcolor=sprintf("#%02X%02X00",round($rot*$schritt),round($gruen*$schritt));
if($color==$fcolor){
echo "<font color=$fcolor; size=+2>-->Text </font>";
}else{
echo "---<font color=$fcolor size=+2> Text </font>";
}
$i++;
if($i%10==0)echo "<br>";
}
?>
Gruß
Günni