sig
  module MakeRawImage :
    functor (E : Image_intf.ENCODE->
      sig
        module Encode : Image_intf.ENCODE
        type elt = E.t
        and bitmap
        and t = { width : int; height : int; bitmap : bitmap; }
        val width : t -> int
        val height : t -> int
        val dump : t -> bytes
        val create_with : int -> int -> bytes -> t
        val create_with_scanlines : int -> int -> bytes array -> t
        val create : int -> int -> t
        val make : int -> int -> elt -> t
        val unsafe_access : t -> int -> int -> bytes * int
        val get_strip : t -> int -> int -> int -> bytes
        val set_strip : t -> int -> int -> int -> bytes -> unit
        val get_scanline : t -> int -> bytes
        val get_scanline_ptr : t -> (int -> (bytes * int) * int) option
        val set_scanline : t -> int -> bytes -> unit
        val unsafe_get : t -> int -> int -> elt
        val unsafe_set : t -> int -> int -> elt -> unit
        val get : t -> int -> int -> elt
        val set : t -> int -> int -> elt -> unit
        val destroy : t -> unit
        val copy : t -> t
        val sub : t -> int -> int -> int -> int -> t
        val blit : t -> int -> int -> t -> int -> int -> int -> int -> unit
        val map :
          (elt -> elt -> elt) ->
          t -> int -> int -> t -> int -> int -> int -> int -> unit
        val blocks : t -> int * int
        val dump_block : t -> int -> int -> Bitmap.Block.t
      end
  module Make :
    functor
      (RI : Image_intf.RAWIMAGE) (CON : sig
                                          type container
                                          type rawimage = RI.t
                                          val rawimage :
                                            container -> rawimage
                                          val create_default :
                                            int ->
                                            int -> rawimage -> container
                                          val create_duplicate :
                                            container ->
                                            int ->
                                            int -> rawimage -> container
                                        end->
      sig
        type t = CON.container
        type elt = RI.elt
        val create : int -> int -> t
        val make : int -> int -> elt -> t
        val destroy : t -> unit
        val get : t -> int -> int -> elt
        val set : t -> int -> int -> elt -> unit
        val unsafe_get : t -> int -> int -> elt
        val unsafe_set : t -> int -> int -> elt -> unit
        val copy : t -> t
        val sub : t -> int -> int -> int -> int -> t
        val blit : t -> int -> int -> t -> int -> int -> int -> int -> unit
        val map :
          (elt -> elt -> elt) ->
          t -> int -> int -> t -> int -> int -> int -> int -> unit
        val dump : t -> bytes
        val unsafe_access : t -> int -> int -> bytes * int
        val get_strip : t -> int -> int -> int -> bytes
        val set_strip : t -> int -> int -> int -> bytes -> unit
        val get_scanline : t -> int -> bytes
        val get_scanline_ptr : t -> (int -> (bytes * int) * int) option
        val set_scanline : t -> int -> bytes -> unit
        val blocks : t -> int * int
        val dump_block : t -> int -> int -> Bitmap.Block.t
      end
  module MakeIndexed :
    functor
      (RI : sig
              module Encode : Image_intf.ENCODE
              type elt = int
              and bitmap
              and t = { width : int; height : int; bitmap : bitmap; }
              val width : t -> int
              val height : t -> int
              val dump : t -> bytes
              val create_with : int -> int -> bytes -> t
              val create_with_scanlines : int -> int -> bytes array -> t
              val create : int -> int -> t
              val make : int -> int -> elt -> t
              val unsafe_access : t -> int -> int -> bytes * int
              val get_strip : t -> int -> int -> int -> bytes
              val set_strip : t -> int -> int -> int -> bytes -> unit
              val get_scanline : t -> int -> bytes
              val get_scanline_ptr : t -> (int -> (bytes * int) * int) option
              val set_scanline : t -> int -> bytes -> unit
              val unsafe_get : t -> int -> int -> elt
              val unsafe_set : t -> int -> int -> elt -> unit
              val get : t -> int -> int -> elt
              val set : t -> int -> int -> elt -> unit
              val destroy : t -> unit
              val copy : t -> t
              val sub : t -> int -> int -> int -> int -> t
              val blit :
                t -> int -> int -> t -> int -> int -> int -> int -> unit
              val map :
                (elt -> elt -> elt) ->
                t -> int -> int -> t -> int -> int -> int -> int -> unit
              val blocks : t -> int * int
              val dump_block : t -> int -> int -> Bitmap.Block.t
            end) (CON : sig
                          type container
                          type rawimage = RI.t
                          type mapelt
                          val rawimage : container -> rawimage
                          val create_default :
                            int -> int -> rawimage -> container
                          val create_duplicate :
                            container -> int -> int -> rawimage -> container
                          val colormap : container -> mapelt Color.map
                        end->
      sig
        type t = CON.container
        type elt = int
        val create : int -> int -> t
        val make : int -> int -> elt -> t
        val destroy : t -> unit
        val get : t -> int -> int -> elt
        val set : t -> int -> int -> elt -> unit
        val unsafe_get : t -> int -> int -> elt
        val unsafe_set : t -> int -> int -> elt -> unit
        val copy : t -> t
        val sub : t -> int -> int -> int -> int -> t
        val blit : t -> int -> int -> t -> int -> int -> int -> int -> unit
        val map :
          (elt -> elt -> elt) ->
          t -> int -> int -> t -> int -> int -> int -> int -> unit
        val dump : t -> bytes
        val unsafe_access : t -> int -> int -> bytes * int
        val get_strip : t -> int -> int -> int -> bytes
        val set_strip : t -> int -> int -> int -> bytes -> unit
        val get_scanline : t -> int -> bytes
        val get_scanline_ptr : t -> (int -> (bytes * int) * int) option
        val set_scanline : t -> int -> bytes -> unit
        val blocks : t -> int * int
        val dump_block : t -> int -> int -> Bitmap.Block.t
        type mapelt = CON.mapelt
        val get_color : t -> int -> int -> mapelt
        val unsafe_get_color : t -> int -> int -> mapelt
      end
end