/******************************************************************************* * bmp.h * Microsoft Windows bitmap (BMP) file definitions. * * 1.0 1992-01-27 drt. First cut. * 1.1 1992-04-13 drt. Added bmp_file struct. * 1.2 1992-08-25 drt. Renamed bmp_header members. * 1.3 1994-09-29 drt. Added OS/2 os2_bmp_header struct. * 1.4 1994-11-03 drt. Added bmp_read_rgbtab() et al. * 1.5 1997-03-29 drt. Reformatted 4-space tabs into 8-space tabs. * 1.6 2001-09-30 drt. Converted int types for Win32. * * Copyright ©1992-2001 by David R. Tribble, all rights reserved. */ #ifndef drt_bmp_h #define drt_bmp_h 106 #ifdef __cplusplus extern "C" { #endif /* Identification */ #ifndef NO_H_IDENT static const char drt_bmp_h_id[] = "@(#)drt/gr/bmp/bmp.h 1.6 2001-09-30"; #endif /* System includes */ #include #include /* Porting definitions */ #ifndef int16 #if INT_MAX == 32767 #define int16 int /* 16-bit integer type */ #else #define int16 short /* 16-bit integer type */ #endif #endif #ifndef int32 #if INT_MAX == 2147483647 #define int32 int /* 32-bit integer type */ #else #define int32 long /* 32-bit integer type */ #endif #endif /******************************************************************************* * Microsoft Windows bitmap (BMP) file format * * Uncompressed 256-color BMP * * 00000 42 4D magic, `BM' \ * 00002 36 B4 04 00 file size, 0x04B436 308278 | * 00006 00 00 00 00 (reserved) | * 0000A 36 04 00 00 header + color map size, 1078 | * | * 0000E 28 00 00 00 this subheader size, 40 | * 00012 80 02 00 00 image width, 640 pixels | * 00016 E0 01 00 00 image depth, 480 pixels | * 0001A 01 00 number of bit planes, 1 | * 0001C 08 00 bits per pixel, 8 (256 colors) | * 0001E 00 00 00 00 compression type, 0 (none) | * 00022 00 00 00 00 image size, bytes (or zero) | * 00026 00 00 00 00 X pels per meter, 0 | * 0002A 00 00 00 00 Y pels per meter, 0 | * 0002E 00 00 00 00 colors used (or zero) | * 00032 00 00 00 00 important colors (or zero) / * * 00036 21 21 21 00 RGB for color 00 (b,g,r,a) \ * 0003A F2 21 21 00 RGB for color 01 | * 0003E 21 F2 21 00 RGB for color 02 +- RGB map * : : : : | * 00432 F2 F3 F2 00 RGB for color FF / * * 00436 08 08 08 08 pixel data bytes (one byte per pixel) * : : : (left to right, bottom to top) * 006B6 00 : (end of line padding, even byte) * : : : * 4B430 08 08 08 08 : * 4B434 08 08 : * 4B436 end of file * * 0000.0000 42 4D 36 04 00 00 00 00 00 00 36 04 00 00 28 00 * 0000.0010 00 00 80 02 00 00 E0 01 00 00 01 00 08 00 00 00 * 0000.0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 * 0000.0030 00 00 00 00 00 00|21 21 21 00 F2 21 21 00 21 F2 * 0000.0040 21 00 F2 F2 21 00 21 21 F2 00 F2 21 F2 00 21 80 * 0000.0050 F2 00 F2 F2 F2 00 80 80 80 00 F2 80 80 00 80 F2 * 0000.0060 80 00 F2 F2 80 00 80 80 F2 00 F2 80 F2 00 80 F2 * 0000.0070 F2 00 F2 F2 F2 00 21 21 21 00 2E 21 29 00 44 21 * 0000.0080 21 00 55 21 21 00 4E 21 2E 00 4E 44 21 00 55 21 * : * : * 0000.0400 F1 00 DC EA F1 00 D4 F2 F1 00 F2 F2 F1 00 EA F2 * 0000.0410 F1 00 EA F2 F1 00 DC F2 F1 00 F2 F2 F1 00 EA F2 * 0000.0420 F1 00 F2 F1 F1 00 F2 F1 F2 00 F1 F2 F1 00 F2 F2 * 0000.0430 F2 00 F2 F3 F2 00|08 08 08 08 08 08 08 08 08 08 * 0000.0440 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 * : * : * 0000.06B0 08 08 08 08 08 08|08 08 08 08 08 08 08 08 08 08 * 0000.06C0 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 * : * : * 0004.B400 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 * 0004.B410 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 * 0004.B420 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 08 * 0004.B430 08 08 08 08 08 08| */ /******************************************************************************* * Compressed 256-color BMP * * 00000 42 4D magic, `BM' \ * 00002 D7 DF 01 00 file size, 0x01DFD7 122839 | * 00006 00 00 00 00 (reserved) | * 0000A 36 04 00 00 header + color map size, 1078 | * | * 0000E 28 00 00 00 this subheader size, 40 | * 00012 80 02 00 00 image width, 640 pixels | * 00016 E0 01 00 00 image depth, 480 pixels | * 0001A 01 00 number of bit planes, 1 | * 0001C 08 00 bits per pixel, 8 (256 colors) | * 0001E 01 00 00 00 compression type, 1 (RLE) | * 00022 00 00 00 00 image size, bytes (or zero) | * 00026 00 00 00 00 X pels per meter, 0 | * 0002A 00 00 00 00 Y pels per meter, 0 | * 0002E 00 00 00 00 colors used (or zero) | * 00032 00 00 00 00 important colors (or zero) / * * 00036 21 21 21 00 RGB for color 00 (b,g,r,a) \ * 0003A F2 21 21 00 RGB for color 01 | * 0003E 21 F2 21 00 RGB for color 02 +- RGB map * : : : | * 00432 F2 F3 F2 00 RGB for color FF / * * 00436 FF 08 RLE pixel data * 00438 FF 08 : (left to right, bottom to top) * : : : * 1DFCF FF 08 : (count + value) * 1DFD1 82 08 : (count + value) * 1DFD3 00 00 : (end of line padding) * 1DFD5 00 01 : (end of file padding?) * 1DFD7 end of file * * 0000.0000 42 4D D7 DF 01 00 00 00 00 00 36 04 00 00 28 00 * 0000.0010 00 00 80 02 00 00 E0 01 00 00 01 00 08 00 01 00 * 0000.0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 * 0000.0030 00 00 00 00 00 00|21 21 21 00 F2 21 21 00 21 F2 * 0000.0040 21 00 F2 F2 21 00 21 21 F2 00 F2 21 F2 00 21 80 * : * : * 0000.0400 F1 00 DC EA F1 00 D4 F2 F1 00 F2 F2 F1 00 EA F2 * 0000.0410 F1 00 EA F2 F1 00 DC F2 F1 00 F2 F2 F1 00 EA F2 * 0000.0420 F1 00 F2 F1 F1 00 F2 F1 F2 00 F1 F2 F1 00 F2 F2 * 0000.0430 F2 00 F2 F2 F2 00 FF 08 FF 08 82 08 00 00 FF 08 * 0000.0440 FF 08 82 08 00 00|FF 08 FF 08 82 08 00 00 FF 08 * 0000.0450 FF 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 * 0000.0460 FF 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 * 0000.0470 FF 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 ÿ * 0000.0480 FF 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 * : * : * 0001.DE80 58 5A 4F 64 00 05 64 58 58 4A 4D 03 4D 00 0E 4B * 0001.DE90 60 67 41 4D 5B 63 5B 67 5A 4F 58 67 59 00 15 59 * 0001.DEA0 4A 51 68 60 4C 64 4B 64 5A 5B 4D 4A 4F 4A 58 4A * 0001.DEB0 67 5A 19 00 02 00 00 03 FF 08 08 D4 08 00 00 BA * 0001.DEC0 08 00 03 FF 00 00 EC 00 00 03 FF 08 08 D4 08 00 * 0001.DED0 00 BA 08 00 03 FF 00 00 EC 00 00 03 FF 08 08 D4 * 0001.DEE0 08 00 00 BA 08 00 03 FF 00 00 EC 00 00 03 FF 08 * 0001.DEF0 08 D4 08 00 00 BA 08 F0 FF D6 08 00 00 FF 08 FF * 0001.DF00 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 FF * 0001.DF10 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 FF * 0001.DF20 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 FF * 0001.DF30 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 FF * 0001.DF40 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 FF * 0001.DF50 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 FF * 0001.DF60 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 FF * 0001.DF70 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 FF * 0001.DF80 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 FF * 0001.DF90 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 FF * 0001.DFA0 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 FF * 0001.DFB0 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 FF * 0001.DFC0 08 82 08 00 00 FF 08 FF 08 82 08 00 00 FF 08 FF * 0001.DFD0 08 82 08 00 00 00 01| */ /******************************************************************************* * Uncompressed 16-color BMP * * 00000 42 4D id `BM' \ * 00002 66 01 00 00 filesize 358 | * 00006 00 00 00 00 reserved | * 0000A 76 00 00 00 headersize 118 | * | * 0000E 28 00 00 00 infoSize 40 | * 00012 17 00 00 00 width 23 | * 00016 14 00 00 00 depth 20 | * 0001A 01 00 biPlanes 1 +- header * 0001C 04 00 bits 4, 16 colors | * 0001E 00 00 00 00 biCompression 0 | * 00022 00 00 00 00 biSizeImage 0 | * 00026 00 00 00 00 biXPelsPerMeter 0, 0 dpi | * 0002A 00 00 00 00 biYPelsPerMeter 0, 0 dpi | * 0002E 00 00 00 00 biClrUsed 0 | * 00032 00 00 00 00 biClrImportant 0 / * * 00036 00 00 00 00 RGB for color 0 (b,g,r,a) \ * 0003A 00 00 00 00 RGB for color 1 | * 0003E 00 00 00 00 RGB for color 2 | * 00042 00 00 00 00 RGB for color 3 | * 00046 00 00 00 00 RGB for color 4 | * 0004A 00 00 00 00 RGB for color 5 | * 0004E 00 00 00 00 RGB for color 6 | * 00052 00 00 00 00 RGB for color 7 | * 00056 00 00 00 00 RGB for color 8 +- RBG map * 0005A 00 00 00 00 RGB for color 9 | * 0005E 00 00 00 00 RGB for color A | * 00062 00 00 00 00 RGB for color B | * 00066 00 00 00 00 RGB for color C | * 0006A 00 00 00 00 RGB for color D | * 0006E 00 00 00 00 RGB for color E | * 00072 FF FF FF 00 RGB for color F / * * 00076 FF FF FF FF pixel data, line 19 \ * FF FF FF FF | * FF FF FF 00 plus padding bytes | * 00082 FF FF FF FF pixel data, line 18 | * FF FF FF FF +- pixels * FF FF FF 00 plus padding bytes | * : : : | * 0015A FF FF FF FF pixel data, line 0 | * FF FF FF FF | * FF FF FF 00 plus padding bytes / * 00166 * * * 00000|42 4D 66 01 00 00 00 00 00 00 76 00 00 00 28 00 * 00010 00 00 17 00 00 00 14 00 00 00 01 00 04 00 00 00 * 00020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 * 00030 00 00 00 00 00 00|00 00 00 00,00 00 00 00,00 00 * 00040 00 00,00 00 00 00,00 00 00 00,00 00 00 00,00 00 * 00050 00 00,00 00 00 00,00 00 00 00,00 00 00 00,00 00 * 00060 00 00,00 00 00 00,00 00 00 00,00 00 00 00,00 00 * 00070 00 00,FF FF FF 00|FF FF FF FF FF FF FF FF FF FF * 00080 FF F0,FF FF FF FF FF FF FF FF FF FF FF F0,FF FF * 00090 FF FF FF FF FF FF FF FF FF F0,FF FF FF FF FF FF * 000A0 FF FF FF FF FF F0,FF FF FF FF FF FF FF FF FF FF * 000B0 FF F0,FF FF FF FF FF FF FF FF FF FF FF F0,FF FF * 000C0 FF FF FF FF FF FF FF FF FF F0,FF FF FF FF FF FF * 000D0 FF FF FF FF FF F0,FF FF FF FF FF FF FF FF FF FF * 000E0 FF F0,FF FF FF FF FF FF FF FF FF FF FF F0,FF FF * 000F0 FF FF FF FF FF FF FF FF FF F0,FF FF FF FF FF FF * 00100 FF FF FF FF FF F0,FF FF FF FF FF FF FF FF FF FF * 00110 FF F0,FF FF FF FF FF FF FF FF FF FF FF F0,FF FF * 00120 FF FF FF FF FF FF FF FF FF F0,FF FF FF FF FF FF * 00130 FF FF FF FF FF F0,FF FF FF FF FF FF FF FF FF FF * 00140 FF F0,FF FF FF FF FF FF FF FF FF FF FF F0,FF FF * 00150 FF FF FF FF FF FF FF FF FF F0,FF FF FF FF FF FF * 00160 FF FF FF FF FF F0| */ /******************************************************************************* * Uncompressed 2-color BMP * * 00000 42 4D magic, `BM' \ * 00002 3E 18 00 00 file size, 0x00183E 6206 | * 00006 00 00 00 00 (reserved) | * 0000A 3E 00 00 00 header + color map size, 62 | * | * 0000E 28 00 00 00 this subheader size, 40 | * 00012 C0 00 00 00 image width, 192 pixels | * 00016 00 01 00 00 image depth, 256 pixels | * 0001A 01 00 number of bit planes, 1 +- header * 0001C 01 00 bits per pixel, 1 (2 colors) | * | * 0001E 00 00 00 00 compression type, 0 (none) | * 00022 00 00 00 00 image size, bytes (or zero) | * 00026 61 0F 00 00 X pels per meter, 3937 | * 0002A 61 0F 00 00 Y pels per meter, 3937 | * 0002E 00 00 00 00 colors used (or zero) | * 00032 00 00 00 00 important colors (or zero) / * * 00036 00 00 00 00 RGB for color 00 (b,g,r,a) \ * 0003A FF FF FF 00 RGB for color 01 /-- RGB map * * 0003E 28 90 25 AF pixel data bytes (8 pixels per byte) * : : : (left to right, bottom to top) * 00056 55 55 55 54 : * : : : * 0006E 91 46 1A 55 : * : : : * 0183A 82 04 0A 45 : * 0183E end of file * * 0000.0000 42 4D 3E 18 00 00 00 00 00 00 3E 00 00 00 28 00 * 0000.0010 00 00 C0 00 00 00 00 01 00 00 01 00 01 00 00 00 * 0000.0020 00 00 00 00 00 00 61 0F 00 00 61 0F 00 00 00 00 * 0000.0030 00 00 00 00 00 00|00 00 00 00 FF FF FF 00|28 90 * 0000.0040 25 AF 3D 59 0A 98 0A 92 34 F5 7D 80 00 62 28 89 * 0000.0050 75 5C AD 40 14 00|55 55 54 00 80 A2 54 A7 58 16 * 0000.0060 00 33 A5 60 02 90 2F 30 8E A5 EB 02 01 18|91 46 * 0000.0070 1A 55 24 85 4A 48 62 21 00 AF 5D 50 00 0D 06 85 * 0000.0080 35 10 3C 85 12 05 72 8C 65 54 CA 78 92 A6 91 A9 * 0000.0090 80 B5 EB 48 00 E0 01 AA E8 09 E9 20 83 42 09 92 * 0000.00A0 89 95 21 85 68 34 13 80 01 A6 57 3A 02 50 25 41 * 0000.00B0 45 04 63 01 44 90 62 58 28 29 53 1A 15 85 CF 00 * 0000.00C0 03 0E BE F4 00 00 01 B1 B6 69 90 80 91 49 55 22 * 0000.00D0 AD 48 AE E0 B3 22 2A 00 00 50 C9 53 00 4A 01 44 * 0000.00E0 4A 91 2F 90 82 A8 49 CA 91 51 20 05 04 54 92 00 * 0000.00F0 00 19 2C A4 80 00 02 94 F0 65 6A 8F 28 51 52 11 * 0000.0100 24 96 9A 9A 69 4A A5 D0 00 04 A9 55 00 02 40 C6 * : * : * 0000.1800 A4 49 81 42 8A 0A 45 22 85 4B 94 8A 82 AD 58 94 * 0000.1810 00 C5 B9 56 4E 59 26 57 48 92 28 B5 22 C8 92 CA * 0000.1820 39 90 5A F3 D5 50 42 49 55 14 02 48 90 82 50 90 * 0000.1830 15 24 95 44 54 95 54 94 A2 2A 82 04 0A 45| */ /******************************************************************************* * Uncompressed 24-bit color BMP * * 00000 42 4D id `BM' * 00002 EB 02 00 00 filesize 747 * 00006 00 00 00 00 r 00 00 00 00 * 0000A 36 00 00 00 headersize 54 * * 0000E 28 00 00 00 infosize 40 \ * 00012 17 00 00 00 width 23 | * 00016 14 00 00 00 depth 20 | * 0001A 01 00 biplanes 1 | * 0001C 18 00 bits 24 | * | * 0001E 00 00 00 00 compression 0=none +- info * 00022 A0 05 00 00 sizeimage 1440 | * 00026 61 0F 00 00 Xpels 3937 | * 0002A 61 0F 00 00 Ypels 3937 | * 0002E 00 00 00 00 clrused 0 | * 00032 00 00 00 00 clrimportant 0 / * * (no color map) * * 00036 line 19, RGB pixel data (b,g,r) * FF FE FF FF FF FF FF FF FF FF FF FF FF FF FF * FF FE FF FF FF FF FF FF FF FF FF FE FF FF FE * FF FE FF FF FE FF FF FF FF FF FD FF FF FE FE * FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF * FF FF FF FF FF FF FF FF FF * 00 14 01 * 0007E line 18 * FF FE FF FF FF FF FF FF FF FF FF FF FF FF FF * FF FE FF FF FF FF FF FF FF FF FF FF FF FF FF * FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF * FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF * FF FF FF FF FF FF FF FF FF * 00 14 01 * 000C6 line 17 * : * : * 0058E line 0 * FF FE FF FF FF FF FF FE FF FE FE FF FF FF FF * FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF * FF FE FF FF FE FF FF FF FF FF FF FF FF FF FF * FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF * FF FF FF FF FF FF FF FF FF * 00 14 01 * 005D6 */ /******************************************************************************* * Uncompressed OS/2 4-bit color BMP * * 00000 42 4D id `BM' * 00002 B2 06 00 00 filesize 1714 * 00006 00 00 00 00 r 00 00 00 00 * 0000A 4A 00 00 00 headersize 74 (incl map) * * 0000E 0C 00 00 00 infosize 12 \ * 00012 50 00 width 80 | * 00014 29 00 depth 41 +- info * 00016 01 00 biplanes 1 | * 00018 04 00 bits 4 / * * 0001A 00 00 00 RGB for color 0, (b,g,r)? \ * 0001D 00 00 BF : | * 00020 00 BF 00 : | * 00023 00 BF BF : | * 00026 BF 00 00 : | * 00029 BF 00 BF : | * 0002C BF BF 00 : | * 0002F C0 C0 C0 : +- RGB map * 00032 80 80 80 : | * 00035 00 00 FF : | * 00038 00 FF 00 : | * 0003B 00 FF FF : | * 0003E FF 00 00 : | * 00041 FF 00 FF : | * 00044 FF FF 00 : | * 00047 FF FF FF RGB for color F / * * 0004A FF FF FF FF pixel data, two per byte, 1640 bytes * : : * : : * 006AE FF FF FF FF * 006B2 * * 0000.0000 42 4D,B2 06 00 00,00 00 00 00,4A 00 00 00,0C 00 * 0000.0010 00 00,50 00,29 00,01 00, 04 00|00 00 00 00,00 BF * 0000.0020 00 BF,00 00 BF BF,BF 00 00 BF,00 BF BF BF,00 C0 * 0000.0030 C0 C0,80 80 80 00,00 FF 00 FF,00 00 FF FF,FF 00 * 0000.0040 00 FF 00 FF FF FF 00 FF FF FF|FF FF FF FF FF FF * 0000.0050 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF * : * : * 0000.0670 00 00 00 0F 0F FF FF FF FF F8 0F FF FF FF FF FF * 0000.0680 FF FF FF FF FF FF FF FF FF F0 FF FF FF FF FF FF * 0000.0690 FF FF FF FF FF FF FF 87 F0 00 07 0F 0F FF FF FF * 0000.06A0 FF F8 0F FF FF FF FF FF FF FF FF FF FF FF FF FF * 0000.06B0 FF FF .. .. .. .. .. .. .. .. .. .. .. .. .. .. */ /* Name aliases for each memory model (ain't DOS a bitch?) */ #if defined(__SMALL__) #define bmp_file Sbmp_file #define BMP_FILE sBMP_FILE #define bmp_palette16 Sbmp_palette16 #define bmp_pow2 Sbmp_pow2 #define bmp_close Sbmp_close #define bmp_dump_hdr Sbmp_dump_hdr #define bmp_dump_rgbtab Sbmp_dump_rgbtab #define bmp_open Sbmp_open #define bmp_read_byte Sbmp_read_byte #define bmp_read_eoln Sbmp_read_eoln #define bmp_read_hdr Sbmp_read_hdr #define bmp_read_pixel Sbmp_read_pixel #define bmp_read_rgb Sbmp_read_rgb #define bmp_read_rgbtab Sbmp_read_rgbtab #define bmp_write_eof Sbmp_read_eof #define bmp_write_eoln Sbmp_write_eoln #define bmp_write_hdr Sbmp_write_hdr #define bmp_write_pixel Sbmp_write_pixel #define bmp_write_rgb Sbmp_write_rgb #define bmp_write_rgbtab Sbmp_write_rgbtab #elif defined(__COMPACT__) #define bmp_file Cbmp_file #define BMP_FILE cBMP_FILE #define bmp_palette16 Cbmp_palette16 #define bmp_pow2 Cbmp_pow2 #define bmp_close Cbmp_close #define bmp_dump_hdr Cbmp_dump_hdr #define bmp_dump_rgbtab Cbmp_dump_rgbtab #define bmp_open Cbmp_open #define bmp_read_byte Cbmp_read_byte #define bmp_read_eoln Cbmp_read_eoln #define bmp_read_hdr Cbmp_read_hdr #define bmp_read_pixel Cbmp_read_pixel #define bmp_read_rgb Cbmp_read_rgb #define bmp_read_rgbtab Cbmp_read_rgbtab #define bmp_write_eof Cbmp_read_eof #define bmp_write_eoln Cbmp_write_eoln #define bmp_write_hdr Cbmp_write_hdr #define bmp_write_pixel Cbmp_write_pixel #define bmp_write_rgb Cbmp_write_rgb #define bmp_write_rgbtab Cbmp_write_rgbtab #elif defined(__MEDIUM__) #define bmp_file Mbmp_file #define BMP_FILE mBMP_FILE #define bmp_palette16 Mbmp_palette16 #define bmp_pow2 Mbmp_pow2 #define bmp_close Mbmp_close #define bmp_dump_hdr Mbmp_dump_hdr #define bmp_dump_rgbtab Mbmp_dump_rgbtab #define bmp_open Mbmp_open #define bmp_read_byte Mbmp_read_byte #define bmp_read_eoln Mbmp_read_eoln #define bmp_read_hdr Mbmp_read_hdr #define bmp_read_pixel Mbmp_read_pixel #define bmp_read_rgb Mbmp_read_rgb #define bmp_read_rgbtab Mbmp_read_rgbtab #define bmp_write_eof Mbmp_read_eof #define bmp_write_eoln Mbmp_write_eoln #define bmp_write_hdr Mbmp_write_hdr #define bmp_write_pixel Mbmp_write_pixel #define bmp_write_rgb Mbmp_write_rgb #define bmp_write_rgbtab Mbmp_write_rgbtab #elif defined(__LARGE__) #define bmp_file Lbmp_file #define BMP_FILE lBMP_FILE #define bmp_palette16 Lbmp_palette16 #define bmp_pow2 Lbmp_pow2 #define bmp_close Lbmp_close #define bmp_dump_hdr Lbmp_dump_hdr #define bmp_dump_rgbtab Lbmp_dump_rgbtab #define bmp_open Lbmp_open #define bmp_read_byte Lbmp_read_byte #define bmp_read_eoln Lbmp_read_eoln #define bmp_read_hdr Lbmp_read_hdr #define bmp_read_pixel Lbmp_read_pixel #define bmp_read_rgb Lbmp_read_rgb #define bmp_read_rgbtab Lbmp_read_rgbtab #define bmp_write_eof Lbmp_read_eof #define bmp_write_eoln Lbmp_write_eoln #define bmp_write_hdr Lbmp_write_hdr #define bmp_write_pixel Lbmp_write_pixel #define bmp_write_rgb Lbmp_write_rgb #define bmp_write_rgbtab Lbmp_write_rgbtab #elif defined(__HUGE__) #define bmp_file Hbmp_file #define BMP_FILE hBMP_FILE #define bmp_palette16 Hbmp_palette16 #define bmp_pow2 Hbmp_pow2 #define bmp_close Hbmp_close #define bmp_dump_hdr Hbmp_dump_hdr #define bmp_dump_rgbtab Hbmp_dump_rgbtab #define bmp_open Hbmp_open #define bmp_read_byte Hbmp_read_byte #define bmp_read_eoln Hbmp_read_eoln #define bmp_read_hdr Hbmp_read_hdr #define bmp_read_pixel Hbmp_read_pixel #define bmp_read_rgb Hbmp_read_rgb #define bmp_read_rgbtab Hbmp_read_rgbtab #define bmp_write_eof Hbmp_read_eof #define bmp_write_eoln Hbmp_write_eoln #define bmp_write_hdr Hbmp_write_hdr #define bmp_write_pixel Hbmp_write_pixel #define bmp_write_rgb Hbmp_write_rgb #define bmp_write_rgbtab Hbmp_write_rgbtab #else /* No memory model defined (e.g., Win32), aliases are not necessary */ #endif /******************************************************************************* * struct os2_bmp_header * OS/2 bitmap (BMP) file header. */ struct os2_bmp_header { unsigned int16 id; /* identification magic number */ unsigned int32 filesize; /* file length */ unsigned char r[4]; /* (reserved, zeros) */ unsigned int32 headersize; /* header size */ unsigned int32 infoSize; /* subheader size (12) */ unsigned int16 width; /* image width, pixels */ unsigned int16 depth; /* image height, pixels */ unsigned int16 biPlanes; /* number of bit planes */ unsigned int16 bits; /* bits per pixel */ }; #define OS2_BMP_HEADER_VS 1 /******************************************************************************* * struct bmp_header * Bitmap (BMP) file header. */ struct bmp_header { unsigned int16 id; /* identification magic number */ unsigned int32 filesize; /* file length */ unsigned char r[4]; /* (reserved, zeros) */ unsigned int32 headersize; /* header size */ unsigned int32 infoSize; /* subheader size (40) */ unsigned int32 width; /* image width, pixels */ unsigned int32 depth; /* image height, pixels */ unsigned int16 biPlanes; /* number of bit planes */ unsigned int16 bits; /* bits per pixel */ unsigned int32 biCompression; /* compression type */ unsigned int32 biSizeImage; /* image size, bytes (or zero) */ unsigned int32 biXPelsPerMeter;/* horiz image resolution */ unsigned int32 biYPelsPerMeter;/* vert image resolution */ unsigned int32 biClrUsed; /* colors used (or zero) */ unsigned int32 biClrImportant; /* important colors (or zero) */ }; #define BMP_HEADER_VS 1 #define BMP_HDR_MAGIC 0x4D42 /* file magic number */ #define BMP_CMP_NONE 0L /* no compression */ #define BMP_CMP_RLE8 1L /* 8-bit run-length encoding */ #define BMP_CMP_RLE4 2L /* 4-bit run-length encoding */ /******************************************************************************* * struct bmp_rgb * BMP RGB palette entry. */ struct bmp_rgb { unsigned char b; /* blue value */ unsigned char g; /* green value */ unsigned char r; /* red value */ unsigned char a; /* alpha value */ }; /******************************************************************************* * struct os2_bmp_rgb * OS/2 BMP RGB palette entry. */ struct os2_bmp_rgb { unsigned char b; /* blue value */ unsigned char g; /* green value */ unsigned char r; /* red value */ }; /******************************************************************************* * struct bmp_rgbpix * BMP 24-bit RGB pixel. */ struct bmp_rgbpix { unsigned char b; /* blue component */ unsigned char g; /* green component */ unsigned char r; /* red component */ }; /******************************************************************************* * struct bmp_file * BMP file control info. */ struct bmp_file { struct bmp_header h; /* header info */ FILE * fp; /* file stream */ struct bmp_rgb * map; /* RGB color table */ unsigned int flags; /* bitflags */ int mode; /* open mode */ unsigned int ncols; /* colors in palette */ unsigned int linesz; /* bytes per line (4j) */ unsigned int byteno; /* current byte number of line */ unsigned char rep; /* repeat count */ unsigned char pix; /* repeated pixel value */ unsigned char byte; /* current pixels byte */ unsigned char bitno; /* current pixel bit number */ }; typedef struct bmp_file BMP_FILE; #define BMP_FILE_VS 1 #define BMP_FILE_F_OS2 0x0001 /* OS/2 BMP file */ #define BMP_FILE_F_RGB3 0x0002 /* RGB map entries are */ /* Public variables */ extern struct bmp_rgb bmp_palette16[0x10]; extern unsigned int bmp_pow2[]; /* Public functions */ extern int bmp_close(BMP_FILE *fp); extern int bmp_dump_hdr(FILE *out, const struct bmp_header *h); extern int bmp_dump_rgbtab(FILE *out, const struct bmp_rgb tab[], unsigned num); extern BMP_FILE * bmp_open(const char *name, int mode); extern int bmp_read_byte(BMP_FILE *fp); extern int bmp_read_eoln(BMP_FILE *fp); extern int bmp_read_hdr(BMP_FILE *fp); extern int32 bmp_read_pixel(BMP_FILE *fp); extern int bmp_read_rgb(BMP_FILE *fp, struct bmp_rgbpix *color); extern int bmp_read_rgbtab(BMP_FILE *fp, struct bmp_rgb tab[]); extern int bmp_write_eof(BMP_FILE *fp); extern int bmp_write_eoln(BMP_FILE *fp); extern int bmp_write_hdr(BMP_FILE *fp); extern int bmp_write_pixel(BMP_FILE *fp, int32 pix); extern int bmp_write_rgb(BMP_FILE *fp, struct bmp_rgbpix *color); extern int bmp_write_rgbtab(BMP_FILE *fp, const struct bmp_rgb tab[], unsigned num); #ifdef __cplusplus } #endif #endif /* drt_bmp_h */ /* End bmp.h */