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 -> string
        val create_with : int -> int -> string -> t
        val create_with_scanlines : int -> int -> string array -> t
        val create : int -> int -> t
        val make : int -> int -> elt -> t
        val unsafe_access : t -> int -> int -> string * int
        val get_strip : t -> int -> int -> int -> string
        val set_strip : t -> int -> int -> int -> string -> unit
        val get_scanline : t -> int -> string
        val get_scanline_ptr : t -> (int -> (string * int) * int) option
        val set_scanline : t -> int -> string -> 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->
      functor
        (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 -> string
          val unsafe_access : t -> int -> int -> string * int
          val get_strip : t -> int -> int -> int -> string
          val set_strip : t -> int -> int -> int -> string -> unit
          val get_scanline : t -> int -> string
          val get_scanline_ptr : t -> (int -> (string * int) * int) option
          val set_scanline : t -> int -> string -> 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 -> string
              val create_with : int -> int -> string -> t
              val create_with_scanlines : int -> int -> string array -> t
              val create : int -> int -> t
              val make : int -> int -> elt -> t
              val unsafe_access : t -> int -> int -> string * int
              val get_strip : t -> int -> int -> int -> string
              val set_strip : t -> int -> int -> int -> string -> unit
              val get_scanline : t -> int -> string
              val get_scanline_ptr :
                t -> (int -> (string * int) * int) option
              val set_scanline : t -> int -> string -> 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->
      functor
        (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 -> string
          val unsafe_access : t -> int -> int -> string * int
          val get_strip : t -> int -> int -> int -> string
          val set_strip : t -> int -> int -> int -> string -> unit
          val get_scanline : t -> int -> string
          val get_scanline_ptr : t -> (int -> (string * int) * int) option
          val set_scanline : t -> int -> string -> 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