sig
  type t
  val createFromFile : filename:string -> SFImage.t
  val createFromColor :
    width:int -> height:int -> color:SFColor.t -> SFImage.t
  val createFromMemory : data:bytes -> SFImage.t
  val createFromPixels : width:int -> height:int -> data:bytes -> SFImage.t
  val createFromPixelsArray :
    pixels:(int * int * int * int) array array -> SFImage.t
  type input =
      [ `Color of int * int * SFColor.t
      | `Filename of string
      | `Memory of bytes
      | `Pixels of int * int * bytes
      | `PixelsArray of (int * int * int * int) array array ]
  val create : SFImage.input -> SFImage.t
  val getWidth : image:SFImage.t -> int
  val getHeight : image:SFImage.t -> int
  val getSize : image:SFImage.t -> int * int
  type gl_image =
      (int, Stdlib.Bigarray.int8_unsigned_elt, Stdlib.Bigarray.c_layout)
      Stdlib.Bigarray.Genarray.t
  val getPixelsBA : image:SFImage.t -> SFImage.gl_image
  val getPixelsStr : image:SFImage.t -> string
  val getPixel4 : image:SFImage.t -> x:int -> y:int -> SFColor.t
  val getPixel3 : image:SFImage.t -> x:int -> y:int -> SFColor.t
  val getPixelRGB : image:SFImage.t -> x:int -> y:int -> SFColor.rgb
  val getPixelRGBA : image:SFImage.t -> x:int -> y:int -> SFColor.rgba
  val saveToFile : image:SFImage.t -> filename:string -> unit
  val setPixel : image:SFImage.t -> x:int -> y:int -> color:SFColor.t -> unit
  val createMaskFromColor :
    image:SFImage.t -> color:SFColor.t -> alpha:int -> unit
  val flipHorizontally : image:SFImage.t -> unit
  val flipVertically : image:SFImage.t -> unit
end