jsummers / bmpsuite

A set of Windows BMP image files, for testing purposes
https://entropymine.com/jason/bmpsuite/
GNU General Public License v3.0
57 stars 16 forks source link

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 jason1@pobox.com https://entropymine.com/jason/bmpsuite/

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 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 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 http://www.gnu.org/licenses/.

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".