How BMP Works
BMP (Bitmap) is Microsoft's original Windows image format, and it is about as simple as a raster image can get. A BMP file begins with a small file header marked by the ASCII signature "BM", followed by an information header describing the image's width, height, bit depth, and (rarely used) compression, and then the raw pixel array itself. In the most common form, every pixel is stored directly, in full, with no compression at all.
That uncompressed storage is BMP's whole story. Because it keeps every pixel as-is, BMP is lossless, the image never degrades, but the files are very large, often many times the size of the same picture as PNG or JPG. There is no clever encoding saving space; a BMP is essentially a direct memory dump of the image, which makes it trivially simple for software to read and write but wasteful to store or transmit.
A couple of technical quirks are worth knowing. BMP pixel rows are conventionally stored bottom-to-top rather than top-to-bottom, a legacy of early Windows graphics. Rows are also padded to 4-byte boundaries. These details matter only to programmers writing BMP code; to a user, a BMP is just a plain, heavy, perfectly preserved image.
Why BMP Is Rarely Used Today
BMP has been almost entirely superseded for everyday use, and the reason is straightforward: PNG does everything BMP does, losslessly, in a far smaller file, and adds transparency support that classic BMP lacks. For any situation where you want a lossless image, PNG is the better choice, so BMP's main historical advantage (perfect quality) is matched by formats that are also compact and web-friendly.
You still encounter BMP in a few places: as a temporary or intermediate format inside older Windows software, in some legacy or embedded systems where simplicity of decoding matters more than file size, and occasionally as the output of basic screenshot or scanning tools on Windows. In those niches its dead-simple structure is an asset. Everywhere else, it has been replaced.
When (and When Not) to Use BMP
Use BMP only when something specifically requires it, an old application that reads nothing else, an embedded system with a minimal image decoder, or a workflow where a guaranteed-uncompressed, trivially-parsed file is needed. In every other case, prefer PNG for lossless images (it is smaller and supports transparency) or JPG/WebP for photographs (far smaller still). If you have BMP files taking up space, converting them to PNG preserves the exact image quality while dramatically reducing their size.
Limitations
BMP's limitations are simply the cost of its simplicity: huge file sizes from the lack of compression, no transparency in the classic format, no animation, weak metadata support, and no web browser support in practice, so BMP cannot be used directly online. Its one virtue, an extremely simple structure that any program can read, is rarely worth those trade-offs now that compact lossless formats are universal.