如何读取OCAML中的位图?
我想使用OCAML读取位图文件(来自文件系统)并将像素(颜色)存储在具有位图第四维的数组内,每个像素将占用阵列中的一个单元格。如何读取OCAML中的位图?
我发现函数Graphics.dump_image image - >颜色数组数组 但它不读取文件。
我不知道一个开箱即用的方法。你可以打开该文件open_in
阅读它在与input_char
时间字节的头和数据吮吸,并建立了color array array
这样简单的格式(例如骨形态发生蛋白),但对于像JPG格式或PNG滚你自己的东西解决方案可能会比你想要的更多的工作。
CAMLIMAGE应该这样做。如果你使用它来管理你的ocaml软件包,还有一个debian软件包(libcamlimage-ocmal-dev
),以及通过godi进行的安装。
作为读取及处理在ocaml的图像的有用的例子的话,建议找过了一种在一个接缝移除算法的代码在eigenclass。
你也可以,由乔纳森说 - 但不是从ocaml的well--调用C函数,如ImageMagick。虽然你要对图像数据进行大量的操作以使图像变为ocaml,但您可以随时为所有函数编写c来操作图像作为抽象数据类型 - 这似乎与完全相反尽管如此,你需要用C编写大部分程序,而不是ocaml。
因为我最近想玩弄camlimages(并遇到了一些麻烦安装它 - 我不得不修改两个文件毫升从编译错误,很简单的人,虽然)。这是一个快速程序,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
如果你不”不想使用CAMLIMAGE,通常使用原始RGB或PNM/PPM(其中有一个易于创建标题格式和RGB值)图像。 ImageMagick允许您查看这些格式或将其转换为更多可用的格式。
感谢名单给你回答,但我真正需要的是读取* .bmp文件,并将其转换成一个颜色数组,你librairies是马丽娟,但我不需要所有的东西,这样你就可以帮助几行字,请! – 0xFF 2009-03-05 21:18:13