Bitmap/Read an image through a pipe: Difference between revisions

Content added Content deleted
m (→‎{{header|Go}}: better yet, fix the anti-aliasing)
(→‎{{header|Perl 6}}: Add perl 6 example)
Line 151: Line 151:
(img)
(img)
;;</lang>
;;</lang>

=={{header|Perl 6}}==
{{works with|Rakudo|2017.09}}
Uses pieces from [[Bitmap#Perl_6| Bitmap]] and [[Bitmap/Read_a_PPM_file#Perl_6| Read a PPM file]] tasks. Included here to make a complete, runnable program.

Uses imagemagick convert to pipe the image in.

<lang perl6>class Pixel { has UInt ($.R, $.G, $.B) }
class Bitmap {
has UInt ($.width, $.height);
has Pixel @.data;
}

role PPM {
method P6 returns Blob {
"P6\n{self.width} {self.height}\n255\n".encode('ascii')
~ Blob.new: flat map { .R, .G, .B }, self.data
}
}

sub getline ( $proc ) {
my $line = '#'; # skip comment when reading a .png
$line = $proc.out.get while $line.substr(0,1) eq '#';
$line;
}

my $filename = './camelia.png';

my $proc = run 'convert', $filename, 'ppm:-', :enc('ISO-8859-1'), :out;

my $type = getline($proc);
my ($width, $height) = getline($proc).split: ' ';
my $depth = getline($proc);

my Bitmap $b = Bitmap.new( width => $width.Int, height => $height.Int) but PPM;

$b.data = $proc.out.slurp.ords.rotor(3).map:
{ Pixel.new(R => $_[0], G => $_[1], B => $_[2]) };

'./camelia.ppm'.IO.open(:bin, :w).write: $b.P6;</lang>

See [https://github.com/thundergnat/rc/blob/master/img/camelia.png camelia image here].



=={{header|PicoLisp}}==
=={{header|PicoLisp}}==