Schrift
[thread]7852[/thread]

Darstellung von Farben

Leser: 1


<< >> 9 Einträge, 1 Seite
Yvonne
 2006-04-03 18:18
#64351 #64351
User since
2006-03-14
8 Artikel
BenutzerIn
[default_avatar]
Hi,

ich möchte in Perl eine Balken zeichnen dessen Farbe von z.B. rot nach grün geht, fliessend.

Ausserdem möchte ich bestimmten anderen Balken eine dieser Farben dann zuweisen, also hellgrün, dunkelrot, was dazwischen oder so, anhand von Werten (Zahlenwerte), die diese Balken haben.

Der erste Balken wäre eine Art Legende um zu schauen, in welchem Bereich mein Balken von Interesse liegt.

Hat jemand einen Tipp, wie man das am besten realisiert? Wäre das Farbmodell RGB sinnvoll und wie könnte ich es umsetzen?

Yvonne
renee
 2006-04-03 18:24
#64352 #64352
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Im Web? Mit Tk? Bitte beschreibe Dein Problem etwas genauer...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Dubu
 2006-04-03 18:27
#64353 #64353
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Welche Ziel-Oberfläche? HTML? Tk? WxWin?

Wahrscheinlich lässt sich so ein Verlauf am besten mit CPAN:GD oder CPAN:Image::Magick erzeugen. Das beschränkt dir dann auch gleich die verfügbaren Farbmodelle (AFAIR bei beiden auf RGB).
Yvonne
 2006-04-03 18:30
#64354 #64354
User since
2006-03-14
8 Artikel
BenutzerIn
[default_avatar]
Sorry, habs auch sehr umständlich beschrieben.

Ja im Web möchte ich diese Balken zeichnen. Jedem Balken ist ein Wert zugewiesen (z.b. zwischen 1 und 100, auch double Werte) und diesem Wert möchte ich eine Farbe zwischen rot und grün zuweisen. Z.b ist 1 = rot und 100 =grün und dazwischen soll die Farbe von rot nach grün fliessend ineinander übergehen.

Ich hoffe man kann es nun verstehen, wie ich das meine.

Yvonne
Taulmarill
 2006-04-03 18:40
#64355 #64355
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
hm, weiss zwar noch nicht 100%ig wie das aussehen soll, hört sich aber so an, als ob man das mit ganz normalem html + css hinbekommt. du musst halt nur den entsprechenden farbwert zwischen #FF0000 und #00FF00 ausrechnen. für die balken würde ich entweder tabellenzellen oder div-blöcke benutzen. je nach dem wie das layout aussehen soll.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Crian
 2006-04-04 16:06
#64356 #64356
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=Taulmarill,03.04.2006, 16:40]hm, weiss zwar noch nicht 100%ig wie das aussehen soll, hört sich aber so an, als ob man das mit ganz normalem html + css hinbekommt. du musst halt nur den entsprechenden farbwert zwischen #FF0000 und #00FF00 ausrechnen. für die balken würde ich entweder tabellenzellen oder div-blöcke benutzen. je nach dem wie das layout aussehen soll.[/quote]
Denk ich auch. Zum Ausrechnen der Farbwerte könnte dir das hier nützlich sein:

Code: (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
#!/usr/bin/perl
use strict;
use warnings;

die "syntax: farbverlauf.pl anzahl startfarbe endfarbe\n" unless 3 == @ARGV;
my @color = farbverlauf(@ARGV);

print '[color=', $_, ']', $_, '[/color]', "\n" for @color;
exit;


sub farbverlauf {
my ($n, $von, $bis) = @_;


my ($f1, $f2, $f3) = $von =~ /^#?([0-9abcdef]{2})([0-9abcdef]{2})([0-9abcdef]{2})$/i;
my ($f4, $f5, $f6) = $bis =~ /^#?([0-9abcdef]{2})([0-9abcdef]{2})([0-9abcdef]{2})$/i;

my $ar = hex $f1; # Anfangsfarbwerte
my $ag = hex $f2;
my $ab = hex $f3;

my $zr = hex $f4; # Endfarbwerte
my $zg = hex $f5;
my $zb = hex $f6;

my $dr = ($zr-$ar) / ($n-1); # Deltawerte
my $dg = ($zg-$ag) / ($n-1);
my $db = ($zb-$ab) / ($n-1);

#print "ar=$ar\tag=$ag\tab=$ab\n",
# "zr=$zr\tzg=$zg\tzb=$zb\n",
# "dr=$dr\tdg=$dg\tdb=$db\n";

my $r = $ar;
my $g = $ag;
my $b = $ab;

my @ergebnis;
for my $i (1 .. $n) {
my $rr = int $r+.5;
my $gg = int $g+.5;
my $bb = int $b+.5;

push @ergebnis, sprintf "#%02X%02X%02X", $rr, $gg, $bb;

$r += $dr;
$g += $dg;
$b += $db;
}

return @ergebnis;
} # sub farbverlauf


Ein Aufruf farbverlauf.pl 10 #FF0000 #00FF00 liefert

Code: (dl )
1
2
3
4
5
6
7
8
9
10
[color=#FF0000]#FF0000[/color]
[color=#E31C00]#E31C00[/color]
[color=#C63900]#C63900[/color]
[color=#AA5500]#AA5500[/color]
[color=#8E7100]#8E7100[/color]
[color=#718E00]#718E00[/color]
[color=#55AA00]#55AA00[/color]
[color=#39C600]#39C600[/color]
[color=#1CE300]#1CE300[/color]
[color=#00FF00]#00FF00[/color]


... das sieht dann ohne CODE-Tags so aus:

#FF0000
#E31C00
#C63900
#AA5500
#8E7100
#718E00
#55AA00
#39C600
#1CE300
#00FF00\n\n

<!--EDIT|Crian|1144153025-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Yvonne
 2006-04-04 16:38
#64357 #64357
User since
2006-03-14
8 Artikel
BenutzerIn
[default_avatar]
Danke Euch. Ich habs auch noch mit dem RGB Modell versucht und der Code sieht so aus:

use GD;
use strict;

my $img = new GD::Image (900,900);

my $white = $img -> colorAllocate(255,255,255);

$img->transparent($white);
$img ->interlaced( 'true' );

my $rot = 255;
my $gruen = 0;

for (my $j = 0;$j<255;$j++) {
my $color = $img -> colorAllocate($rot,$gruen, 0);

$img->line($j,20,$j+1,100,$color);
$rot --;
$gruen ++;
}



binmode STDOUT;
print $img->png;


Das Ergebnis ist dem ähnlich mit den Hexadezimalzahlen.

Ich zeichne für die Linie jeden Punkt einzeln mit einer neuen Farbe und die Farbe bekomme ich dadurch, dass ich den Rot- und Grünanteil gegeneinander laufen lasse. Nur gibt es doch auch Rot- und Grüntöne, die auch einen Blauanteil in der Farbe haben.

Ich hatte auch einfach gehofft, dass es dafür schon eine Funktion gibt ALLE Farbtöne von Grün in Richtung Rot darzustellen.
Crian
 2006-04-04 17:15
#64358 #64358
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Für so feste Farben kannst du das so machen, meine Funktion erzeugt auch komplexere Farbverläufe.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Yvonne
 2006-04-04 20:32
#64359 #64359
User since
2006-03-14
8 Artikel
BenutzerIn
[default_avatar]
Super, danke das klappt schonmal. Auch mit dem RGB Modell ist es so ok.

Jetzt habe ich aber noch ein anderes Problem. Und zwar würde ich in einem Perl Code mit dem RGB Modell eine Farbe anzeigen lassen.
Ich habe also meinetwegen ein Tupel (255,0,0) und ich möchte sagen $rot = (255,0,0). Ich weiss natürlich das das so nicht geht. Gibt es da eine Möglichkeit ohne das GD Modul ohne $img = new.... ?? Gibt es da eventuell eine einfache Perl Funktion? Habe noch nichts entsprechendes gefunden.

Danke!!!

Yvonne
<< >> 9 Einträge, 1 Seite



View all threads created 2006-04-03 18:18.