我想使用OCAML读取位图文件(来自文件系统)并将像素(颜色)存储在具有位图的第二维的数组内,每个像素将占用数组中的一个单元.
我找到了函数Graphics.dump_image image - > color array array 但它不能从文件中读取.
CAMLIMAGE应该这样做.还有一个debian包(libcamlimage-ocmal-dev
),以及通过godi安装,如果你用它来管理你的ocaml包.
作为在ocaml中读取和操作图像的一个有用示例,我建议在本征类上查看接缝去除算法的代码.
你也可以像jonathan所说的那样 - 但不是很好 - 从ocaml调用C函数,比如ImageMagick.虽然你要对图像数据进行大量操作以将图像带入ocaml,但你总是可以为所有函数编写c来操作图像作为抽象数据类型 - 这似乎完全与你想要的,用C语言编写大部分程序而不是ocaml.
因为我最近想玩camlimages(并且在安装它时遇到了一些麻烦 - 我不得不修改编译错误中的两个ml文件,但非常简单).这是一个快速程序,black_and_white.ml
以及如何编译它.这应该让人无痛地开始使用包(特别是动态图像生成):
let () = let width = int_of_string Sys.argv.(1) and length = int_of_string Sys.argv.(2) and name = Sys.argv.(3) and black = {Color.Rgb.r = 0; g=0; b=0; } and white = {Color.Rgb.r = 255; g=255; b=255; } in let image = Rgb24.make width length black in for i = 0 to width-1 do for j = 0 to (length/2) - 1 do Rgb24.set image i j white; done; done; Png.save name [] (Images.Rgb24 image)
并编译,
ocamlopt.opt -I /usr/local/lib/ocaml/camlimages/ ci_core.cmxa graphics.cmxa ci_graphics.cmxa ci_png.cmxa black_and_white.ml -o black_and_white
并运行,
./black_and_white 20 20 test1.png