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