sig
  val check_header : bytes -> Images.header
  val load : bytes -> Images.load_option list -> Images.t
  val save : bytes -> Images.save_option list -> Images.t -> unit
  type bmp = {
    bmpFileHeader : Bmp.bitmapfileheader;
    bmpInfoHeader : Bmp.bitmapinfoheader;
    bmpRgbQuad : Images.rgb array;
    bmpBytes : bytes;
  }
  and bitmapfileheader = {
    bfType : int;
    bfSize : int;
    bfReserved1 : int;
    bfReserved2 : int;
    bfOffBits : int;
  }
  and bitmapinfoheader = {
    biSize : int;
    biWidth : int;
    biHeight : int;
    biPlanes : int;
    biBitCount : Bmp.bibitcount;
    biCompression : Bmp.bicompression;
    biSizeImage : int;
    biXPelsPerMeter : int;
    biYPelsPerMeter : int;
    biClrUsed : int;
    biClrImportant : int;
  }
  and bicompression = BI_RGB | BI_RLE8 | BI_RLE4
  and bibitcount = Monochrome | Color16 | Color256 | ColorRGB | ColorRGBA
  val load_bmp : bytes -> Bmp.bmp
  val save_bmp : bytes -> Bmp.bmp -> unit
end