Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,38 @@
|
|||
let read_ppm ~filename =
|
||||
let ic = open_in filename in
|
||||
let line = input_line ic in
|
||||
if line <> "P6" then invalid_arg "not a P6 ppm file";
|
||||
let line = input_line ic in
|
||||
let line =
|
||||
try if line.[0] = '#' (* skip comments *)
|
||||
then input_line ic
|
||||
else line
|
||||
with _ -> line
|
||||
in
|
||||
let width, height =
|
||||
Scanf.sscanf line "%d %d" (fun w h -> (w, h))
|
||||
in
|
||||
let line = input_line ic in
|
||||
if line <> "255" then invalid_arg "not a 8 bit depth image";
|
||||
let all_channels =
|
||||
let kind = Bigarray.int8_unsigned
|
||||
and layout = Bigarray.c_layout
|
||||
in
|
||||
Bigarray.Array3.create kind layout 3 width height
|
||||
in
|
||||
let r_channel = Bigarray.Array3.slice_left_2 all_channels 0
|
||||
and g_channel = Bigarray.Array3.slice_left_2 all_channels 1
|
||||
and b_channel = Bigarray.Array3.slice_left_2 all_channels 2
|
||||
in
|
||||
for y = 0 to pred height do
|
||||
for x = 0 to pred width do
|
||||
r_channel.{x,y} <- (input_byte ic);
|
||||
g_channel.{x,y} <- (input_byte ic);
|
||||
b_channel.{x,y} <- (input_byte ic);
|
||||
done;
|
||||
done;
|
||||
close_in ic;
|
||||
(all_channels,
|
||||
r_channel,
|
||||
g_channel,
|
||||
b_channel)
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
let () =
|
||||
let img = read_ppm ~filename:"logo.ppm" in
|
||||
let img = to_color(to_grayscale ~img) in
|
||||
output_ppm ~oc:stdout ~img;
|
||||
;;
|
||||
Loading…
Add table
Add a link
Reference in a new issue