0% found this document useful (0 votes)
88 views9 pages

File Format (For Device-Independent Bitmap), Is An Image

The BMP file format is a raster graphics image file format used to store bitmap digital images, especially on Microsoft Windows and OS/2 operating systems. A BMP file contains a BMP file header, bitmap information header, color palette, and bitmap data. It stores pixel image data uncompressed with a color depth of 1, 4, 8, 16, 24, or 32 bits per pixel.

Uploaded by

savke7
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
88 views9 pages

File Format (For Device-Independent Bitmap), Is An Image

The BMP file format is a raster graphics image file format used to store bitmap digital images, especially on Microsoft Windows and OS/2 operating systems. A BMP file contains a BMP file header, bitmap information header, color palette, and bitmap data. It stores pixel image data uncompressed with a color depth of 1, 4, 8, 16, 24, or 32 bits per pixel.

Uploaded by

savke7
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

BMP file format - Wikipedia, the free encyclopedia http://en.wikipedia.

org/wiki/BMP_file_format

From Wikipedia, the free encyclopedia

The BMP file format, sometimes called bitmap or DIB Windows Bitmap
file format (for device-independent bitmap), is an image Filename .bmp or .dib
file format used to store bitmap digital images, especially extension
on Microsoft Windows and OS/2 operating systems.
Internet image/x-ms-bmp (unofficial)
Many older graphical user interfaces used bitmaps in their media type or image/x-bmp (unofficial)
built-in graphics subsystems;[1] for example, the Type code 'BMP '
Microsoft Windows and OS/2 platforms' GDI subsystem, 'BMPf'
where the specific format used is the Windows and OS/2
'BMPp'
bitmap file format, usually named with the file extension
of .BMP or .DIB. Uniform Type com.microsoft.bmp
Identifier

Type of Raster graphics


format

1 Pixel storage
2 Device-independent bitmaps and BMP file
format
2.1 DIBs in memory
2.2 BMP File Header
2.3 Bitmap Information (DIB header)
2.4 Color palette
2.5 Bitmap data
2.6 Example of a 2x2 Pixel, 24-Bit Bitmap
3 Usage of BMP format
4 Related formats
5 See also
6 References
7 External links

In uncompressed BMP files, and many other bitmap file formats, image pixels are stored with a color depth
of 1, 4, 8, 16, 24, or 32 bits per pixel (BPP). Images of 8 bits and fewer can be either grayscale or indexed
color. An alpha channel (for transparency) may be stored in a separate file, where it is similar to a grayscale
image, or in a fourth channel that converts 24-bit images to 32 bits per pixel.

Uncompressed bitmap files (such as BMP) are typically much larger than compressed (with any of various
methods) image file formats for the same image. For example, the 1058×1058 Wikipedia logo, which
occupies about 271 KB in the lossless PNG format, takes about 3358 KB as a 24-bit BMP file.
Uncompressed formats are generally unsuitable for transferring images on the Internet or other slow or
capacity-limited media.

The bits representing the bitmap pixels are packed within rows. Depending on the color depth, a pixel in the
picture will occupy at least n/8 bytes (n is the bit depth, since 1 byte equals 8 bits). The approximate size for

1 di 9 25/05/2010 10.30
BMP file format - Wikipedia, the free encyclopedia http://en.wikipedia.org/wiki/BMP_file_format

a n-bit (2n colors) BMP file in bytes can be calculated, including the effect of starting each word on a 32-bit
dword boundary, as:

,
for BPP ≤ 8

Height and Width are given in pixels.

In the formula above, 54 is the size of the headers in the popular Windows V3 BMP version (14-byte BMP
file header plus 40-byte DIB V3 header); some other header versions will be larger or smaller than that, as
described in tables below. And is the size of the color palette; this size is an approximation, as the
color palette size will be bytes in the OS/2 V1 version, and some other versions may optionally define
n
only the number of colors needed by the image, potentially fewer than 2 .[2] Only files with 8 or fewer bits
per pixel use a palette; for 16-bit (or higher) bitmaps, omit the palette part from the size calculation:

,
for BPP > 8.

For detailed information, see the sections on file format below.

Microsoft has defined a particular representation of color bitmaps of different color depths, as an aid to
exchanging bitmaps between devices and applications with a variety of internal representations. They called
these device-independent bitmaps or DIBs, and the file format for them is called DIB file format or BMP file
format. According to Microsoft support:[2]

A device-independent bitmap (DIB) is a format used to define device-independent bitmaps in


various color resolutions. The main purpose of DIBs is to allow bitmaps to be moved from one
device to another (hence, the device-independent part of the name). A DIB is an external
format, in contrast to a device-dependent bitmap, which appears in the system as a bitmap
object (created by an application...). A DIB is normally transported in metafiles (usually using
the StretchDIBits() function), BMP files, and the Clipboard (CF_DIB data format).

A typical BMP file usually contains the following blocks of data:

BMP File Header Stores general information about the BMP file.
Bitmap Information (DIB
Stores detailed information about the bitmap image.
header)
Stores the definition of the colors being used for indexed color
Color Palette
bitmaps.
Bitmap Data Stores the actual image, pixel by pixel.

The following sections discuss the data stored in the BMP file or DIB in details. This is the standard BMP
file format.[2] Some bitmap images may be stored using a slightly different format, depending on the
application that creates it. Also, not all fields are used; a value of 0 will be found in these unused fields.

2 di 9 25/05/2010 10.30
BMP file format - Wikipedia, the free encyclopedia http://en.wikipedia.org/wiki/BMP_file_format

DIBs in memory

A BMP file is loaded into memory as a DIB data structure, an important component of the Windows GDI
API. The DIB data structure is the same as the BMP file format, but without the 14-byte BMP header.

BMP File Header

This block of bytes is at the start of the file and is used to identify the file. A typical application reads this
block first to ensure that the file is actually a BMP file and that it is not damaged. The first two bytes of the
BMP file format are the character 'B' then the character 'M' in 1-byte ascii encoding. All of the integer
values are stored in little-endian format (i.e. least-significant byte first).

Offset# Size Purpose


the magic number used to identify the BMP file: 0x42 0x4D (Hex code points for B and
M). The following entries are possible:

BM - Windows 3.1x, 95, NT, ... etc


2 BA - OS/2 Bitmap Array
0000h
bytes CI - OS/2 Color Icon
CP - OS/2 Color Pointer
IC - OS/2 Icon
PT - OS/2 Pointer

4
0002h the size of the BMP file in bytes
bytes
2
0006h reserved; actual value depends on the application that creates the image
bytes
2
0008h reserved; actual value depends on the application that creates the image
bytes
4
000Ah the offset, i.e. starting address, of the byte where the bitmap data can be found.
bytes

Equivalent C-Language Header

3 di 9 25/05/2010 10.30
BMP file format - Wikipedia, the free encyclopedia http://en.wikipedia.org/wiki/BMP_file_format

#include <stdint.h>

/* Note: the magic number has been removed from the bmp_header structure
since it causes alignment problems
struct bmpfile_magic should be written/read first
followed by the
struct bmpfile_header
[this avoids compiler-specific alignment pragmas etc.]
*/

struct bmpfile_magic {
unsigned char magic[2];
};

struct bmpfile_header {
uint32_t filesz;
uint16_t creator1;
uint16_t creator2;
uint32_t bmp_offset;
};

Bitmap Information (DIB header)

This block of bytes tells the application detailed information about the image, which will be used to display
the image on the screen. The block also matches the header used internally by Windows and OS/2 and has
several different variants. All of them contain a dword field, specifying their size, so that an application can
easily determine which header is used in the image. The reason that there are different headers is that
Microsoft extended the DIB format several times. The new extended headers can be used with some GDI
functions instead of the older ones, providing more functionality. Since the GDI supports a function for
loading bitmap files, typical Windows applications use that functionality. One consequence of this is that for
such applications, the BMP formats that they support match the formats supported by the Windows version
being run. See the table below for more information.

Size Header Identified by Supported by the GDI of


12 OS/2 V1 BITMAPCOREHEADER OS/2 and also all Windows versions since Windows 3.0
64 OS/2 V2 BITMAPCOREHEADER2
40 Windows V3 BITMAPINFOHEADER all Windows versions since Windows 3.0
108 Windows V4 BITMAPV4HEADER all Windows versions since Windows 95/NT4
124 Windows V5 BITMAPV5HEADER Windows 98/2000 and newer

For compatibility reasons, most applications use the older DIB headers for saving files. With OS/2 being
obsolete, for now the only common format is the V3 header. See next table for its description. All values are
stored as unsigned integers, unless explicitly noted.

Offset
Size Purpose
#

4 di 9 25/05/2010 10.30
BMP file format - Wikipedia, the free encyclopedia http://en.wikipedia.org/wiki/BMP_file_format

Eh 4 the size of this header (40 bytes)


12h 4 the bitmap width in pixels (signed integer).
16h 4 the bitmap height in pixels (signed integer).
1Ah 2 the number of color planes being used. Must be set to 1.
the number of bits per pixel, which is the color depth of the image. Typical values are 1, 4, 8,
1Ch 2
16, 24 and 32.
1Eh 4 the compression method being used. See the next table for a list of possible values.
the image size. This is the size of the raw bitmap data (see below), and should not be
22h 4
confused with the file size.
26h 4 the horizontal resolution of the image. (pixel per meter, signed integer)
2Ah 4 the vertical resolution of the image. (pixel per meter, signed integer)
2Eh 4 the number of colors in the color palette, or 0 to default to 2n.
32h 4 the number of important colors used, or 0 when every color is important; generally ignored.

Note: The image size field can be 0 for BI_RGB bitmaps.

Equivalent C-Language Header (Windows V3 DBI)

typedef struct {
uint32_t header_sz;
uint32_t width;
uint32_t height;
uint16_t nplanes;
uint16_t bitspp;
uint32_t compress_type;
uint32_t bmp_bytesz;
uint32_t hres;
uint32_t vres;
uint32_t ncolors;
uint32_t nimpcolors;
} bmp_dib_v3_header_t;

The compression method field (bytes #30-33) can have the following values:

Value Identified by Compression method Comments


0 BI_RGB none Most common
1 BI_RLE8 RLE 8-bit/pixel Can be used only with 8-bit/pixel bitmaps
2 BI_RLE4 RLE 4-bit/pixel Can be used only with 4-bit/pixel bitmaps
3 BI_BITFIELDS Bit field Can be used only with 16 and 32-bit/pixel bitmaps.
4 BI_JPEG JPEG The bitmap contains a JPEG image
5 BI_PNG PNG The bitmap contains a PNG image

5 di 9 25/05/2010 10.30
BMP file format - Wikipedia, the free encyclopedia http://en.wikipedia.org/wiki/BMP_file_format

Note: BI_JPEG and BI_PNG are for printer drivers and are not supported when rendering to the screen.[3]

Equivalent C-Language Header (Compression Methods)

typedef enum {
BI_RGB = 0,
BI_RLE8,
BI_RLE4,
BI_BITFIELDS,
BI_JPEG,
BI_PNG,
} bmp_compression_method_t;

The OS/2 V1 header is also popular:

Offset Size Purpose


Eh 4 the size of this header (12 bytes)
12h 2 the bitmap width in pixels.
14h 2 the bitmap height in pixels.
16h 2 the number of color planes; 1 is the only legal value
18h 2 the number of bits per pixel. Typical values are 1, 4, 8 and 24.

Note: OS/2 V1 bitmaps cannot be compressed and cannot be 16 or 32 bits/pixel. All values in the OS/2 V1
header are unsigned integers.

A 32-bit version of DIB with integrated alpha channel has been introduced with Windows XP and is used
within its logon and theme system; it has yet to gain wide support in image editing software, but has been
supported in Adobe Photoshop since version 7 and Adobe Flash since version MX 2004 (then known as
Macromedia Flash).

Color palette

The palette occurs in the BMP file directly after the BMP header and the DIB header. Therefore, its offset is
the size of the BMP header plus the size of the DIB header.

The palette is a block of bytes (a table) listing the colors available for use in a particular indexed-color
image. Each pixel in the image is described by a number of bits (1, 4, or 8) which index a single color in this
table. The purpose of the color palette in indexed-color bitmaps is to tell the application the actual color that
each of these index values corresponds to.

A DIB always uses the RGB color model. In this model, a color is terms of different intensities (from 0 to
255) of the additive primary colors red (R), green (G), and blue (B). A color is thus defined using the 3
values for R, G and B (though stored in backwards order in each palette entry).

The number of entries in the palette is either 2n or a smaller number specified in the header (in the OS/2 V1
format, only the full-size palette is supported).[2][4] Each entry contains four bytes, except in the case of the
OS/2 V1 versions, in which case there are only three bytes per entry.[4] The first (and only for OS/2 V1)
three bytes store the values for blue, green, and red, respectively,[2] while the last one is unused and is filled

6 di 9 25/05/2010 10.30
BMP file format - Wikipedia, the free encyclopedia http://en.wikipedia.org/wiki/BMP_file_format

with 0 by most applications.

As mentioned above, the color palette is not used when the bitmap is 16-bit or higher; there are no palette
bytes in those BMP files.

Bitmap data

This block of bytes describes the image, pixel by pixel. Pixels are stored "upside-down" with respect to
normal image raster scan order, starting in the lower left corner, going from left to right, and then row by row
from the bottom to the top of the image.[2] Uncompressed Windows bitmaps can also be stored from the top
row to the bottom, if the image height value is negative.

In the original DIB, the only four legal numbers of bits per pixel are 1, 4, 8, and 24.[2] In all cases, each row
of pixels is extended to a 32-bit (4-byte) boundary, filling with an unspecified value (not necessarily 0) so
that the next row will start on a multiple-of-four byte location in memory or in the file.[2] The total number
of bytes in a row can be calculated as the image size/bitmap height in pixels. Following these rules there are
several ways to store the pixel data depending on the color depth and the compression type of the bitmap.

One-bit (two-color, for example, black and white) pixel values are stored in each bit, with the first
(left-most) pixel in the most-significant bit of the first byte.[2] An unset bit will refer to the first color table
entry, and a set bit will refer to the last (second) table entry.

Four-bit color (16 colors) is stored with two pixels per byte, the left-most pixel being in the more significant
nibble.[2] Each pixel value is an index into a table of up to 16 colors.

Eight-bit color (256 colors) is stored one pixel value per byte. Each byte is an index into a table of up to 256
colors.

RGB color (24-bit) pixel values are stored with bytes as BGR (blue, green, red).[2]

Padding bytes are inserted in order to keep the line of data in multiples of four. For example, a 24-bit bitmap
with width 1 would have 3 bytes of data per row (blue, green, red) so 1 byte of padding, width 2 would have
2, width 3 would have 3, and width 4 would not have any at all.

Example of a 2x2 Pixel, 24-Bit Bitmap

Hex
Offset Size Value Description
Value
Magic Number (unsigned
0h 2 42 4D "BM"
integer 66, 77)
46 00
2h 4 70 Bytes Size of the BMP file
00 00
6h 2 00 00 Unused Application Specific
Example of a 2x2
8h 2 00 00 Unused Application Specific
Pixel Bitmap, with 24
36 00 The offset where the bitmap bits/pixel encoding
Ah 4 54 bytes
00 00 data (pixels) can be found.
28 00 The number of bytes in the
Eh 4 40 bytes
00 00 header (from this point).
02 00 The width of the bitmap in
12h 4 2 pixels
00 00 pixels

7 di 9 25/05/2010 10.30
BMP file format - Wikipedia, the free encyclopedia http://en.wikipedia.org/wiki/BMP_file_format

02 00 The height of the bitmap in


16h 4 2 pixels
00 00 pixels
Number of color planes being
1Ah 2 01 00 1 plane
used.
1Ch 2 18 00 24 bits The number of bits/pixel.
00 00 BI_RGB, No compression
1Eh 4 0
00 00 used
10 00 The size of the raw BMP data
22h 4 16 bytes
00 00 (after this header)
13 0B 2,835 The horizontal resolution of
26h 4
00 00 pixels/meter the image
13 0B 2,835 The vertical resolution of the
2Ah 4
00 00 pixels/meter image
00 00 Number of colors in the
2Eh 4 0 colors
00 00 palette
00 00 0 important
32h 4 Means all colors are important
00 00 colors
Start of Bitmap Data
00 00
36h 3 0 0 255 Red, Pixel (1,0)
FF
FF FF
39h 3 255 255 255 White, Pixel (1,1)
FF
Padding for 4 byte alignment
3Ch 2 00 00 00 (Could be a value other than
zero)
FF 00
3Eh 3 255 0 0 Blue, Pixel (0,0)
00
00 FF
41h 3 0 255 0 Green, Pixel (0,1)
00
Padding for 4 byte alignment
44h 2 00 00 00 (Could be a value other than
zero)

Note that the bitmap data starts with the lower left hand corner of the image.

The simplicity of the BMP file format, and its widespread familiarity in Windows and elsewhere, as well as
the fact that this format is relatively well documented and free of patents, makes it a very common format
that image processing programs from many operating systems can read and write.

While most BMP files have a relatively large file size due to lack of any compression, many BMP files can
be considerably compressed with lossless data compression algorithms such as ZIP (in rare cases of
non-photographic data, up to 0.1% of original size) because they contain redundant data.

Main article: Image file formats

The X Window System uses a similar XBM format for black-and-white images, and XPM (pixelmap) for

8 di 9 25/05/2010 10.30
BMP file format - Wikipedia, the free encyclopedia http://en.wikipedia.org/wiki/BMP_file_format

color images. There are also a variety of "raw" formats, which saves raw data with no other information. The
Portable Pixmap (PPM) and Truevision TGA formats also exist, but are less often used – or only for special
purposes; for example, TGA can contain transparency information.

Numerous other bitmap file formats are in existence, though most are not widely used.[5]

Comparison of graphics file formats

1. ^ Julian Smart, Stefan Csomor, and Kevin Hock (2006). Cross-Platform GUI Programming with Wxwidgets
(http://books.google.com/books?id=CyMsvtgnq0QC&pg=PA265&dq=bitmap+pixmap+gui&as_brr=3&
ei=4SjwRrTpHYSipgL63NS3BA&sig=4_ev_R-Xs8tXCVONCaiJEnFLtI0) . Prentice Hall. ISBN 0131473816.
http://books.google.com/books?id=CyMsvtgnq0QC&pg=PA265&dq=bitmap+pixmap+gui&as_brr=3&
ei=4SjwRrTpHYSipgL63NS3BA&sig=4_ev_R-Xs8tXCVONCaiJEnFLtI0.
2. ^ a b c d e f g h i j k "DIBs and Their Uses" (http://support.microsoft.com/kb/q81498/) . Microsoft Help and
Support. 2005-02-11. http://support.microsoft.com/kb/q81498/.
3. ^ "JPEG and PNG Extensions for Specific Bitmap Functions and Structures" (http://msdn.microsoft.com/en-us
/library/dd145023(VS.85).aspx) . http://msdn.microsoft.com/en-us/library/dd145023(VS.85).aspx.
4. ^ a b "GFF Format Summary: OS/2 Bitmap" (http://netghost.narod.ru/gff/graphics/summary/os2bmp.htm) .
http://netghost.narod.ru/gff/graphics/summary/os2bmp.htm.
5. ^ "List of bitmap file types" (http://www.file-extensions.org/filetype/extensions/name/Bitmap+image/) . Search
File-Extensions.org. http://www.file-extensions.org/filetype/extensions/name/Bitmap+image/.

For a table view of the bitmap file format (http://atlc.sourceforge.net/bmp.html#_toc381201084) at


sourceforge
Bitmap File Structure (http://www.digicamsoft.com/bmp/bmp.html)
An introduction to DIBs (Device Independent Bitmaps) (http://www.herdsoft.com/ti/davincie
/imex3j8i.htm)
BMP test images (http://wvnvaxa.wvnet.edu/vmswww/bmp.html)
Simple C++ Bitmaploader Class (http://www.kalytta.com/bitmap.h)
Bitmap formats and file extensions (http://www.file-extensions.org/filetype/extension/name/bitmap-
image-files)
Retrieved from "http://en.wikipedia.org/wiki/BMP_file_format"
Categories: Graphics file formats | Microsoft Windows multimedia technology

This page was last modified on 23 May 2010 at 09:27.


Text is available under the Creative Commons Attribution-ShareAlike License; additional terms may
apply. See Terms of Use for details.
Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.

Privacy policy
About Wikipedia
Disclaimers

9 di 9 25/05/2010 10.30

You might also like