Skip to content


Folders and files

Last commit message
Last commit date

Latest commit


Repository files navigation

BMP Suite
Version 2.8

This is a set of Windows BMP image files, and a utility for generating them.
Many different varieties of BMP files are included, and are intended to be
useful for testing.

Copyright (C) 2012-2023 Jason Summers

Includes contributions by Matthieu Darbois.

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <>.

The ICC profiles in the "data" subdirectory are not covered by this license.
The swap-r-g.icc profile is the same one used in the MNG test-suite.

Image files generated by this program are not covered by this license, and are
in the public domain (except for the embedded ICC profiles).

Files in the "g" directory I consider to be "good": 
Your program should definitely support them if it claims to support BMP.

Files in the "q" directory I consider to be "questionable":
These may unusual or obsolete, or technically violate the documentation in some
way, or I may be unsure about their validity.

Files in the "b" directory I consider to be "bad":
These are clearly invalid or unreasonable. Make sure your program doesn't crash
when reading them.

The "x" directory contains files in formats related to BMP, that you might not
consider to truly be in "BMP format".

The individual BMP files are described in the html/bmpsuite.html file.

The generation utility is written in C, and is contained in the bmpsuite.c
file, and the files in the 'data' subdirectory. In a Unix-like environment,
type "make bmpsuite" to build the program, or just "make" to build and run it.
Run "make check" to verify that it writes the BMP files correctly.

The data/pal1huff.tif and data/pal1huff.g3 files were created essentially
as follows:
(Using Unix tools. 'convert' is from ImageMagick; 'tiffcp' and 'tiffinfo' are
from libtiff.)
$ convert g/pal1wb.bmp -flip -compress Fax -orient bottom-left -define tiff:photometric=min-is-white temp.tif
$ tiffcp -c g3:1d temp.tif data/pal1huff.tif
$ tiffinfo -s data/pal1huff.tif
  1 Strips:
      0: [       8,     2065]
$ tail -c +9 data/pal1huff.tif | head -c 2065 > data/pal1huff.g3

Then, append six "EOL" codes to the data. Assuming the raw fax data ends with
... a1 d0 e0, append these nine bytes: 02 00 20 02 00 20 02 00 20.
The problem is that this requires knowing what bit the data ended on. It should
always be safe to append 00 10 01 00 10 01 00 10 01, though this has the extra
complication of relying on a feature called "fill bits".