Bitmap/Read an image through a pipe: Difference between revisions
Content added Content deleted
m (→{{header|Go}}: better yet, fix the anti-aliasing) |
Thundergnat (talk | contribs) (→{{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}}== |