11. April 2010
2D-Grafik-Ausgabe mit Cairo und OCaml
Das etwas erweiterte Beispiel zeigt, wie man eine Grafik mit einem einfachen Dreieck über Cairo mit OCaml als PDF-, PNG- und als PostScript-Datei abspeichert.
(* OCaml with Cairo bindings. Based on the sample on the Cairo website: * http://www.cairographics.org/cairo-ocaml/ * * Compile with: * * ocamlopt -I +cairo cairo.cmxa -o cairosample cairosample.ml *) let draw_triangle cr = Cairo.set_line_width cr 15. ; Cairo.move_to cr 200. 100. ; Cairo.line_to cr 300. 300. ; Cairo.rel_line_to cr (-200.) 0. ; Cairo.close_path cr ; Cairo.stroke cr let create_png filename = let img = Cairo.image_surface_create Cairo.FORMAT_ARGB32 400 400 in let cr = Cairo.create img in draw_triangle cr; Cairo_png.surface_write_to_file img filename let create_ps filename = let out = open_out filename in let ps = Cairo_ps.surface_create_for_channel out 400. 400. in let cr = Cairo.create ps in draw_triangle cr; Cairo.surface_finish ps; close_out out let create_pdf filename = let out = open_out filename in let ps = Cairo_pdf.surface_create_for_channel out 400. 400. in let cr = Cairo.create ps in draw_triangle cr; Cairo.surface_finish ps; close_out out let main = create_png "triangle.png"; create_ps "triangle.ps"; create_pdf "triangle.pdf"
Subtil ist der Aufruf an Cairo.surface_finish
. Ohne ihn wird der Puffer nicht in die Datei geschrieben und das PDF/PS-Dokument bleibt leer oder gar korrupt.