]> matita.cs.unibo.it Git - helm.git/blob - helm/DEVEL/lablgtk/lablgtk_20000829-0.1.0/examples/image.ml
Initial revision
[helm.git] / helm / DEVEL / lablgtk / lablgtk_20000829-0.1.0 / examples / image.ml
1 (* $Id$ *)
2
3 open GMain
4 open Gdk
5
6 (* load image *)
7 let buf = String.create (256*256*3)
8 let ic = open_in_bin "image256x256.rgb"
9 let _ = 
10   really_input ic ~buf:buf ~pos:0 ~len:(256*256*3);
11   close_in ic
12
13 let rgb_at x y =
14   let offset = (y * 256 + x) * 3 in
15   (int_of_char buf.[offset  ],
16    int_of_char buf.[offset+1],
17    int_of_char buf.[offset+2])
18
19 (* let id = Thread.create GtkThread.main () *)
20
21 (* Choose a visual appropriate for RGB *)
22 let _ =
23   Gdk.Rgb.init ();
24   GtkBase.Widget.set_default_visual (Gdk.Rgb.get_visual ());
25   GtkBase.Widget.set_default_colormap (Gdk.Rgb.get_cmap ())
26
27 (* We need show: true because of the need of visual *)
28 let window = GWindow.window ~show:true ~width: 256 ~height: 256 ()
29
30 let visual = window#misc#visual
31
32 let color_create = Truecolor.color_creator visual
33
34 let w = window#misc#window
35 let drawing = new GDraw.drawable w
36
37 let _ =
38   window#connect#destroy ~callback:Main.quit;
39
40   let image =
41     Image.create ~kind: `FASTEST ~visual: visual ~width: 256 ~height: 256
42   in
43
44   let draw () =
45     for x = 0 to 255 do
46       for y = 0 to 255 do
47         let r,g,b = rgb_at x y in
48         Image.put_pixel image ~x: x ~y: y 
49           ~pixel: (color_create ~red: (r * 256) ~green: (g * 256) ~blue: (b * 256))
50       done
51     done 
52   in
53  
54   let display () =
55     drawing#image image ~xsrc:0 ~ysrc:0 ~xdest:0 ~ydest:0 ~width:256 ~height:256
56   in
57
58   draw (); 
59
60   window#event#connect#after#expose ~callback:
61     begin fun _ ->
62       display (); false
63     end;
64   (* Thread.join id *)
65
66   window#show ();
67   Main.main ()