Thread Farbverlauf
(19 answers)
Opened by bianca at 2010-02-12 13:59
Habe den Code noch etwas verbessert.
Aber nochmal die Frage: Wo muss ich "schrauben", um die Farben etwas voller zu bekommen. Gerade grün, blau und rot sind mir etwas zu schwach/fade. Wer kennt sich mit Farben aus? Danke Hier der komplette Code inkl. Testwiese: Code (perl): (dl
)
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 #!/usr/bin/perl use strict; use warnings; use CGI; my ($farben); my $zeilen = ''; my %test = ( 1 => { text => 'Gesamter Verlauf 384 Einheiten rot nach blau', anz => 384, }, 2 => { text => 'Gesamter Verlauf 256 Einheiten rot nach grün', anz => 256, para => 1, }, 3 => { text => 'Gesamter Verlauf 128 Einheiten rot nach gelb', anz => 128, para => 2, }, 4 => { text => '134 Farben von rot nach grün', anz => 134, para => 1, }, 5 => { text => '6 Farben von rot nach gelb', anz => 6, para => 2, }, 6 => { text => '10 Farben von rot nach blau', anz => 10, }, 7 => { text => '10 Farben von rot nach grün', anz => 10, para => 1, }, 8 => { text => '10 Farben von rot nach gelb', anz => 10, para => 2, }, ); foreach my $testnr (sort {$a <=> $b} keys %test) { $zeilen .= "<tr><td>Test $testnr - $test{$testnr}{text}</td></tr>"; $farben = farbverlauf ($test{$testnr}{anz},(defined $test{$testnr}{para} ? $test{$testnr}{para} : undef)); $zeilen .= '<tr><td><table cellpadding="0" cellspacing="0" style="border: thin black solid; border-collapse: separate;"><tr>'; foreach my $nr (@$farben) { $zeilen .= '<td title="' . $nr . '" style="background-color: ' . $nr . ';"><img src="../images/trans.gif" width="10" height="10"></td>'; } $zeilen .= '</tr></table></td></tr>'; } print STDOUT CGI -> new -> header . <<HTML_TEIL <html> <head> </head> <body bgcolor="white"> <table> <tr><td>Test Farbverlauf</td></tr> $zeilen </table> </body> </html> HTML_TEIL ; # --------------------------------------------------------------------------------------------------------------------- sub farbverlauf { # # Logik: # ====== # 1. Mitte von 128 bis 255, also FF8080 bis FFFF80 = Rot -> Gelb # 2. Links von 255 runter bis 128, also FFFF80 bis 80FF80 = Gelb -> Grün # 3. Rechts von 128 hoch bis 255, also 80FF80 bis 80FFFF = Grün -> Blau # Ergibt 384 Farben # # Wird aufgerufen mit der Anzahl der benötigten Farben und liefert eine Array-Referenz zurück # # Beispiel: # ========= # my $farben = farbverlauf (4[,1]); # print "Farbe 2 = " . $farben -> [2] . "\n"; # optionaler Parameter: 0 oder undef=von rot nach blau; 1=von rot nach grün; 2=von rot nach gelb # my $anzahl = $_[0]; my %config = ( 0 => { max => 384, }, 1 => { max => 256, }, 2 => { max => 128, }, ); my $modus = (defined $_[1] && exists $config{$_[1]} ? $_[1] : 0); my @arr; if ($anzahl > 1) { $anzahl = $config{$modus}{max} if $anzahl > $config{$modus}{max}; # Minimale Schrittweite darf 1 sein my $schritt = int ($config{$modus}{max} / $anzahl + .5); # Schrittweite anhand Anzahl Werte for (my $z = 0; $z < $anzahl; $z ++) { my @rgb = (255,128,128); # Startfarbe fest Rot $rgb[1] = int (128 + $z * $schritt); if ($rgb[1] > 255) { # Überlauf Mitte nach links schieben $rgb[0] -= $rgb[1] - 256; $rgb[1] = 255; } if ($rgb[0] < 128) { # Überlauf Links nach rechts schieben $rgb[2] += 127 - $rgb[0]; $rgb[0] = 128; } push @arr,sprintf ('#%02X%02X%02X',@rgb); } } return \@arr; } edit: Das Attachment ist das trans.gif. Aufgrund eines Forumbugs wird es hier im Beitrag in D.gif umbenannt. Anhänge Last edited: 2012-02-13 19:17:09 +0100 (CET) 10 print "Hallo"
20 goto 10 |