sig
  module Sample :
    sig
      type semantics =
          [ `Color of Gg.Color.profile * bool | `Other of string * int ]
      val rgb_l : Gg.Raster.Sample.semantics
      val rgba_l : Gg.Raster.Sample.semantics
      val gray_l : Gg.Raster.Sample.semantics
      val graya_l : Gg.Raster.Sample.semantics
      val pp_semantics :
        Format.formatter -> Gg.Raster.Sample.semantics -> unit
      type pack =
          [ `FourCC of string * Gg.Ba.scalar_type option
          | `Other of string * Gg.Ba.scalar_type option
          | `PU8888 ]
      val pp_pack : Format.formatter -> Gg.Raster.Sample.pack -> unit
      type format
      val format :
        ?pack:Gg.Raster.Sample.pack ->
        Gg.Raster.Sample.semantics ->
        Gg.Ba.scalar_type -> Gg.Raster.Sample.format
      val semantics : Gg.Raster.Sample.format -> Gg.Raster.Sample.semantics
      val scalar_type : Gg.Raster.Sample.format -> Gg.Ba.scalar_type
      val pack : Gg.Raster.Sample.format -> Gg.Raster.Sample.pack option
      val dim : Gg.Raster.Sample.format -> int
      val scalar_count :
        ?first:int ->
        ?w_stride:int ->
        ?h_stride:int ->
        [ `D1 of Gg.size1 | `D2 of Gg.size2 | `D3 of Gg.size3 ] ->
        Gg.Raster.Sample.format -> int
      val pp_format : Format.formatter -> Gg.Raster.Sample.format -> unit
    end
  type t = Gg.raster
  val v :
    ?res:Gg.v3 ->
    ?first:int ->
    ?w_stride:int ->
    ?h_stride:int ->
    [ `D1 of float | `D2 of Gg.size2 | `D3 of Gg.size3 ] ->
    Gg.Raster.Sample.format -> Gg.buffer -> Gg.Raster.t
  val res : Gg.Raster.t -> Gg.v3 option
  val get_res : Gg.Raster.t -> Gg.v3
  val first : Gg.Raster.t -> int
  val w_stride : Gg.Raster.t -> int
  val h_stride : Gg.Raster.t -> int
  val sample_format : Gg.Raster.t -> Gg.Raster.Sample.format
  val buffer : Gg.Raster.t -> Gg.buffer
  val wi : Gg.Raster.t -> int
  val hi : Gg.Raster.t -> int
  val di : Gg.Raster.t -> int
  val w : ?meters:bool -> Gg.Raster.t -> float
  val h : ?meters:bool -> Gg.Raster.t -> float
  val d : ?meters:bool -> Gg.Raster.t -> float
  val size1 : ?meters:bool -> Gg.Raster.t -> Gg.size1
  val size2 : ?meters:bool -> Gg.Raster.t -> Gg.size2
  val size3 : ?meters:bool -> Gg.Raster.t -> Gg.size3
  val box1 : ?meters:bool -> ?mid:bool -> ?o:float -> Gg.Raster.t -> Gg.box1
  val box2 : ?meters:bool -> ?mid:bool -> ?o:Gg.p2 -> Gg.Raster.t -> Gg.box2
  val box3 : ?meters:bool -> ?mid:bool -> ?o:Gg.p3 -> Gg.Raster.t -> Gg.box3
  val dim : Gg.Raster.t -> int
  val kind : Gg.Raster.t -> [ `D1 | `D2 | `D3 ]
  val sub :
    [ `D1 of Gg.box1 | `D2 of Gg.box2 | `D3 of Gg.box3 ] ->
    Gg.Raster.t -> Gg.Raster.t
  val scalar_strides : Gg.Raster.t -> int * int * int
  val equal : Gg.Raster.t -> Gg.Raster.t -> bool
  val compare : Gg.Raster.t -> Gg.Raster.t -> int
  val pp : Format.formatter -> Gg.Raster.t -> unit
  val res_default : float
  val spm_of_spi : float -> float
  val spm_to_spi : float -> float
end