sig
  type format = ARGB32 | RGB24 | A8 | A1
  val create :
    Cairo.Image.format -> width:int -> height:int -> Cairo.Surface.t
  type data8 =
      (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array1.t
  type data32 =
      (int32, Bigarray.int32_elt, Bigarray.c_layout) Bigarray.Array2.t
  val create_for_data8 :
    Cairo.Image.data8 ->
    Cairo.Image.format -> ?stride:int -> int -> int -> Cairo.Surface.t
  val create_for_data32 :
    ?width:int ->
    ?height:int -> ?alpha:bool -> Cairo.Image.data32 -> Cairo.Surface.t
  val get_data8 : Cairo.Surface.t -> Cairo.Image.data8
  val get_data32 : Cairo.Surface.t -> Cairo.Image.data32
  val get_format : Cairo.Surface.t -> Cairo.Image.format
  val get_width : Cairo.Surface.t -> int
  val get_height : Cairo.Surface.t -> int
  val get_stride : Cairo.Surface.t -> int
  val stride_for_width : Cairo.Image.format -> width:int -> int
  val output_ppm :
    Pervasives.out_channel ->
    ?width:int -> ?height:int -> Cairo.Image.data32 -> unit
end