.bmp looks simple until you count the variants
A BMP is a 14-byte file header, a DIB header that comes in seven sizes, an optional palette, and pixel rows usually stored bottom-up, each padded to a multiple of 4 bytes. Within that frame there are 1- to 32-bit depths, two run-length codecs, bit masks, alpha that may or may not count, and even PNG or JPEG wrapped inside. This page reads all of them with its own decoder, writes 12 variants of one image, and asks your browser which it can actually show.
The source is 101 × 67 pixels, an odd width so every row needs padding, with rounded transparent corners and a 60%-transparent circle. Each variant is written by this page, handed to createImageBitmap, and compared pixel by pixel with this page’s own decoder. Palette variants lose colour by design; what matters is whether the browser shows the same pixels and what it does with alpha. Click “inspect” to load a variant above.
Every BMP row is padded to a 32-bit boundary: stride = ⌊(width × bits + 31) / 32⌋ × 4. Readers that forget it get the classic sheared, diagonal-striped image, because each row starts a few bytes too early. Change the width and depth to see the bytes of one row.