Jenda Krynicky wrote: > > From: Konrad Foerstner <[EMAIL PROTECTED]> > > > I have a strange error in my script. It should > > paint a column of lines next to each other in > > colors which are determinated by a given sequence > > of letters. It works...but only to the position > > of 251. After this point all lines have the color > > of the line at position 251...even when I use > > a different letter sequence. > > > > Is this a sign? The 251? ;) Nope, any hints? > > > > Here is the basic sheme. I hope I did't kill > > an impotant detail. > > > > > > my $seq = $_[0]; > > my @seq_s = split ('',$seq); > > > > my $length = length $seq; > > > > $pic_length = $length +100; > > > > my $img = new GD::Image($pic_length,30); > > > > for (my $pos = '0'; $pos < ($length-1); ++$pos) > > { > > my $aa = $seq_s[$pos]; > > > > my $color; > > > > if ($aa eq 'A') > > {$color = $img->colorAllocate(255,0,0);} > > elsif ($aa eq 'B') > > {$color = $img->colorAllocate(255,0,0);} > > elsif ($aa eq 'C') > > {$color = $img->colorAllocate(0,0,255);} > > elsif ($aa eq 'D') > > {$color = $img->colorAllocate(0,0,255);} > > > > $img->line($pos,1,$pos,21,$color); > > } > > Why do you keep allocating colors you aready have? > > I would suggest something like this : > > %colors = ( > 'A' => $img->colorAllocate(255,0,0), > 'B' => $img->colorAllocate(255,0,0), > 'C' => $img->colorAllocate(0,0,255), > 'D' => $img->colorAllocate(0,0,255), > ); > > for (my $pos = '0'; $pos < ($length-1); ++$pos) { > my $aa = $seq_s[$pos]; > my $color = $colors{$aa}; > $img->line($pos,1,$pos,21,$color); > }
my @seq_s = split //, $_[0]; my $img = new GD::Image( @seq_s + 100, 30 ); my %colors = ( A => $img->colorAllocate( 255, 0, 0 ), B => $img->colorAllocate( 255, 0, 0 ), C => $img->colorAllocate( 0, 0, 255 ), D => $img->colorAllocate( 0, 0, 255 ), ); for my $pos ( 0 .. @seq_s - 2 ) { $img->line( $pos, 1, $pos, 21, $colors{$seq_s[$pos]} ); } John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]