如何读取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 
+0

感谢名单给你回答,但我真正需要的是读取* .bmp文件,并将其转换成一个颜色数组,你librairies是马丽娟,但我不需要所有的东西,这样你就可以帮助几行字,请! – 0xFF 2009-03-05 21:18:13

如果你不”不想使用CAMLIMAGE,通常使用原始RGB或PNM/PPM(其中有一个易于创建标题格式和RGB值)图像。 ImageMagick允许您查看这些格式或将其转换为更多可用的格式。

您也可以使用OCaml的许多SDL绑定中的一种,特别是SDL_image,它可以轻松加载各种图像,并提供将单个像素和原始数据作为数组访问的功能。

OCamlSDL是一个受欢迎的。