File: gif.ml

package info (click to toggle)
ocaml-bitstring 2.0.2-2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 1,276 kB
  • ctags: 492
  • sloc: ml: 3,360; sh: 377; makefile: 324; ansic: 113
file content (33 lines) | stat: -rw-r--r-- 1,087 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
(* GIF header parser.
 * $Id: gif.ml 142 2008-07-17 15:45:56Z richard.wm.jones $
 *)

open Printf

let () =
  if Array.length Sys.argv <= 1 then
    failwith "usage: gif input.gif";
  let filename = Sys.argv.(1) in
  let bits = Bitstring.bitstring_of_file filename in

  bitmatch bits with
  | { ("GIF87a"|"GIF89a") : 6*8 : string; (* GIF magic. *)
      width : 16 : littleendian;
      height : 16 : littleendian;
      colormap : 1;			(* Has colormap? *)
      colorbits : 3;			(* Color res = colorbits+1 *)
      sortflag : 1;
      bps : 3;				(* Bits/pixel = bps+1 *)
      bg : 8;				(* Background colour. *)
      aspectratio : 8 } ->
      printf "%s: GIF image:\n" filename;
      printf "  size %d %d\n" width height;
      printf "  has global colormap? %b\n" colormap;
      printf "  colorbits %d\n" (colorbits+1);
      printf "  global colormap is sorted? %b\n" sortflag;
      printf "  bits/pixel %d\n" (bps+1);
      printf "  background color index %d\n" bg;
      printf "  aspect ratio %d\n" aspectratio

  | { _ } ->
      eprintf "%s: Not a GIF image\n" filename