closed
Goto Top

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 face-smile

danke schon mal

Content-ID: 96898

Url: https://administrator.de/contentid/96898

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

SarekHL
SarekHL 14.09.2008 um 18:21:49 Uhr
Goto Top
ich möchte gerne aus einem übergebenen Prozentwert
(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.
Closed
Closed 14.09.2008 um 18:31:16 Uhr
Goto Top
naja genau darum geht es. gibt es da eventuelle standard-lösungen für? das kann ja kein an den haaren herbeigezogenes problem sein. denke das sollte sicherlich öfters auftauchen.
würde wahrscheinlich einen rot zu grün farbverlauf wählen. natürlich dann von dunkelrot bis hellgrün.

und ich habe bisher keinen wirklichen ansatz, wie ich die prozentwerte in rgb werte umwandeln kann
filippg
filippg 14.09.2008 um 18:48:28 Uhr
Goto Top
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
filippg
filippg 14.09.2008 um 18:58:28 Uhr
Goto Top
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
Closed
Closed 14.09.2008 um 19:23:59 Uhr
Goto Top
super. vielen dank filipp. werde mir das direkt mal anschauen. meldemich dann wieder

Nachtrag: leider hat das auch nicht viel geholfen. ich werde jetzt zuder unschönen switch case lösung übergehen, da ich das doch recht dringend benötige. falls es doch eine bessere variante gibt, werde ich es darauf umstellen, aber vorerst belasse ich es dabei.

danke für die hilfe
Guenni
Guenni 16.09.2008 um 20:26:55 Uhr
Goto Top
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:
<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