✓ Free & Unlimited ✓ No Upload to Server ✓ No Signup ✓ True 8-Bit BMP Output

JPG to BMP 256 Color

Convert any JPG or JPEG to a true 8-bit BMP with a 256-color indexed palette — free, instant, entirely in your browser. No file upload, no signup, no watermark. Perfect for Arduino, embedded displays, legacy software, and retro projects.

🔒 Files never leave your device
🎨 256-color palette (8-bit)
Instant in-browser conversion
♾️ Unlimited, free forever

JPG → BMP 256 Color (8-Bit)

Free · No Upload · Indexed Color Palette · Instant

Best results with flat-color images Photos with gradients will show some banding — this is normal when reducing to 256 colors. Logos, icons, pixel art, and simple graphics convert with excellent quality.

Drop your JPG / JPEG here

or click to choose — JPG, JPEG · Unlimited · Free

Ready

Preview (256 colors applied)

What Is a JPG to BMP 256 Color Conversion?

Converting a JPG image to BMP 256 color means transforming a standard photographic JPEG file — which contains millions of colors — into a Windows Bitmap file that uses only 256 distinct colors, stored as an 8-bit indexed palette. This process is also called image to BMP 8-bit or indexed color conversion, and it is one of the most specific and technically precise image format conversions available online.

A JPEG file can represent up to 16.7 million colors (24-bit true color), using lossy compression to keep file sizes small. A 256-color BMP, by contrast, stores each pixel as a single byte (0–255) that points to an entry in a color lookup table — called a palette or color table. This palette contains exactly 256 RGBQUAD entries, each defining a specific color that appears in the image. The result is a larger, uncompressed file that is dramatically simpler to read and parse with software code.

The color reduction step — from millions to 256 — requires a process called color quantization. This tool uses the median-cut algorithm, one of the most respected quantization techniques, which recursively divides the color space to find the 256 colors that best represent your image's color distribution. The result is a palette that captures the most visually important colors in your source image with minimal visual loss.

🔬 Technical note: The output BMP file from this tool uses the standard Windows BITMAPFILEHEADER + BITMAPINFOHEADER structure with BI_RGB compression (none), a 256-entry RGBQUAD color table, and 1-byte-per-pixel pixel data with 4-byte row padding. This is the most compatible 8-bit BMP format supported by virtually all embedded SDKs, image libraries, and legacy applications.

Why Does Color Reduction Happen?

When you reduce an image from millions of colors to 256, each pixel's original color is replaced by the closest matching color in the 256-entry palette. In areas with subtle gradients — like sky in a photograph — this substitution creates visible "steps" or "bands" where the color changes abruptly instead of smoothly. This artifact is called color banding and is an expected, unavoidable consequence of 8-bit color limits.

However, for many use cases — logos, icons, interface elements, sprites, and simple graphics — the 256-color limit is more than sufficient. Flat-color artwork converted to BMP 256 color often looks nearly identical to the original because all the colors it uses are already within the palette range. This is exactly why embedded systems developers, retro game programmers, and legacy application maintainers regularly use this specific conversion.

The BMP File Structure Explained

Understanding why embedded developers prefer BMP over PNG or JPG requires knowing what makes BMP special: its structure is trivially simple to parse. A compliant 8-bit BMP file is organized as follows:

The total overhead for an 8-bit BMP is just 1078 bytes of header + color table. After that, the pixel data is raw and sequential — there is no compression, no decoding algorithm, and no complex dependency. An Arduino reading an SD card can load a 256-color BMP in just a few hundred lines of C code.

📐 File size formula: For an 8-bit BMP, file size ≈ 1078 bytes + (width × height) bytes, with each row padded to 4-byte alignment. A 160×120 image = 1078 + 19,200 = ~20KB. A 320×240 image = 1078 + 76,800 = ~77KB. Compare this to a JPG of the same image which might be 15–40KB — BMP is larger but instantly readable without a decoder.

How to Convert JPG to BMP 256 Color — Step by Step

This tool makes the JPG to BMP 8-bit conversion as simple as possible. The entire process takes under 10 seconds for most images. Here is a detailed walkthrough of every step, including tips for getting the best quality output.

Step 1 — Prepare your source JPG image

Before uploading, consider the following preparation steps that will directly affect the quality of your 256-color BMP output:

Step 2 — Upload your JPG file

Click the drop zone or drag your JPG file directly onto it. This tool supports batch conversion — you can add multiple JPG files at once and they will all be converted and packaged for download. The tool accepts standard JPG and JPEG extensions. Files are processed locally in your browser; nothing is sent to any server.

After adding your file, you will see it listed with its name and file size. You can remove a file from the list by clicking the × button next to it before converting.

Step 3 — Click "Convert to BMP 256 Color"

Press the convert button to start the process. The tool will:

  1. Load your JPG image onto an HTML5 Canvas element in your browser.
  2. Extract the raw RGBA pixel data for every pixel in the image.
  3. Run the median-cut color quantization algorithm to identify the best 256 colors that represent your image.
  4. Map every pixel to its closest palette color using Euclidean distance in RGB color space.
  5. Write the binary BMP file structure in memory: file header, info header, color table, and pixel data.
  6. Create a downloadable Blob from the binary data.

For typical web-resolution images (up to 1920×1080), this process completes in under 2 seconds on a modern browser. Larger images may take a few seconds longer. A progress bar shows you the status.

Step 4 — Preview and download

After conversion, a preview of your image with 256 colors applied is shown directly on the page. This preview is rendered from the actual palette data, so what you see is exactly what the BMP file contains. Click the "Download BMP" button to save the .bmp file to your computer.

The downloaded file is a fully standards-compliant Windows BMP with an 8-bit indexed palette. It can be opened in MS Paint, GIMP, Photoshop, IrfanView, and any other image viewer. It is ready to load directly with Arduino SD libraries, STM32 image loaders, or any BMP-reading code.

⚠️ Color banding in photos: If you are converting a photograph with smooth gradients (sky, skin tones, backgrounds), you will notice visible color banding in the output. This is not a bug — it is the fundamental limitation of 256 colors. For photographs, consider whether a lower-resolution, smaller image (which has fewer color transitions) might look better. Logos and flat graphics are largely unaffected.

Step 5 — Use the BMP in your project

Depending on your use case, here is what to do next with your converted BMP file:

JPG to BMP 256 Color for Arduino and Embedded Systems

The most common technical reason people need to convert image to BMP 8-bit is embedded systems development — specifically, displaying graphics on small TFT LCD or OLED screens connected to microcontrollers like the Arduino, ESP32, ESP8266, STM32, Raspberry Pi Pico, and similar platforms.

This section explains exactly why 256-color BMP is the preferred format for embedded displays, how to load it in code, and what hardware configurations it works best with.

Why Not Use JPG or PNG Directly?

JPEG decompression requires implementing the Discrete Cosine Transform (DCT), Huffman decoding, and chroma subsampling reversal — a complex process that requires significant CPU time and memory. Most 8-bit microcontrollers like the Arduino Uno (2KB RAM, 16MHz) cannot run a JPEG decoder in real time.

PNG decompression requires DEFLATE (zlib) decompression, which also requires substantial RAM for the sliding window buffer (typically 32KB). Again, this exceeds the capabilities of small microcontrollers.

BMP 8-bit requires zero decompression. Each row is raw pixel data. Each pixel is a 1-byte index into the palette. Loading a BMP on Arduino requires: read row, look up each byte in the color table, push the RGB value to the display. That's it. No math, no algorithms, no buffers. Just sequential memory reads and array lookups.

🤖 Arduino memory context: An Arduino Uno has 2KB of SRAM. A 160×128 pixel 8-bit BMP stores 20,480 bytes of pixel data — too large to fit in RAM at once. The correct approach is to read the BMP row by row from SD card, converting each pixel to the display's native color format (RGB565 for most TFT screens) on the fly. This requires only a small row buffer of ~160 bytes.

Supported Arduino Display Libraries

The following popular Arduino display libraries have built-in BMP loading functions that work directly with 8-bit (256 color) BMP files from SD card:

Sample Code: Reading a 256-Color BMP on Arduino

The following illustrates the conceptual structure for loading a 256-color BMP from an SD card onto an Arduino TFT display. This demonstrates why the format is so convenient for embedded use:

// Conceptual BMP 8-bit loader for Arduino TFT // Assumes SD card and TFT library already initialized void drawBMP256(File bmpFile, int x, int y) { // Skip BITMAPFILEHEADER (14 bytes) bmpFile.seek(14); // Read BITMAPINFOHEADER (40 bytes) int32_t width = readInt32(bmpFile); int32_t height = readInt32(bmpFile); // ... read remaining header fields ... // Read 256-entry color table (1024 bytes) uint16_t palette[256]; // RGB565 for TFT for (int i = 0; i < 256; i++) { uint8_t b = bmpFile.read(); // Blue uint8_t g = bmpFile.read(); // Green uint8_t r = bmpFile.read(); // Red bmpFile.read(); // Reserved palette[i] = tft.color565(r, g, b); } // Read pixel rows (bottom-to-top in BMP) int rowSize = (width + 3) & ~3; // 4-byte aligned for (int row = height - 1; row >= 0; row--) { bmpFile.seek(1078 + row * rowSize); for (int col = 0; col < width; col++) { uint8_t idx = bmpFile.read(); tft.drawPixel(x + col, y + row, palette[idx]); } } }

Notice how simple the logic is: read a byte, look up the color, draw the pixel. No mathematical transforms, no bit manipulation, no streaming decoders. This simplicity is exactly why image to BMP 256 color for embedded systems is such a common requirement.

Recommended Image Sizes for Common Displays

Recommended BMP resolutions for common embedded displays
Display Resolution BMP File Size Common Boards
ST7735 (1.8") 160×128 ~21 KB Arduino Uno, Nano
ILI9341 (2.4") 320×240 ~78 KB ESP32, STM32
ILI9488 (3.5") 480×320 ~155 KB ESP32, ESP8266
ST7789 (2.0") 240×240 ~59 KB Pico, ESP32
SSD1351 (1.5" OLED) 128×128 ~17 KB Arduino, Feather

BMP 256 Color vs Other Image Formats — Full Comparison

Choosing the right image format for your project depends on understanding the trade-offs between file size, color depth, parsing complexity, hardware support, and visual quality. Here is a detailed comparison of BMP 256 color against the formats you are most likely to consider as alternatives.

Image format comparison for embedded and legacy use cases
Property BMP 8-bit (256 color) BMP 24-bit JPG PNG 8-bit GIF
Colors25616.7 million16.7 million256256
CompressionNoneNoneLossy (DCT)Lossless (DEFLATE)Lossless (LZW)
Parse complexity⭐ Very easy⭐ Very easy❌ Very complex⚠️ Moderate⚠️ Moderate
File size (160×128)~21 KB~62 KB~5–15 KB~8–30 KB~10–25 KB
Best for embedded✅ Yes⚠️ Large files❌ No decoder⚠️ Needs zlib⚠️ Needs LZW
Arduino Uno support✅ Easy⚠️ Large RAM❌ No⚠️ Limited⚠️ Limited
Transparency❌ None❌ None❌ None✅ Yes✅ 1-color
Quality (photos)⚠️ Banding✅ Perfect✅ Excellent✅ Perfect⚠️ Banding
Quality (flat art)✅ Excellent✅ Excellent⚠️ Artifacts✅ Excellent✅ Excellent

When to Choose BMP 256 Color Over Other Formats

Choose BMP 8-bit when: Your target hardware is a microcontroller without sufficient RAM or CPU to decode compressed formats; when your image library requires BMP format specifically; when you are building for a retro platform that uses VGA-era palettes; when you need the simplest possible parsing code; or when your image is primarily flat colors, logos, or pixel art where 256 colors is sufficient.

Choose PNG instead when: You need transparency (alpha channel); when you are working in a web or app context with sufficient memory; when lossless quality is required but file size also matters (PNG compresses much better than BMP at the same quality level).

Choose JPG instead when: You are storing or transmitting photographs where file size is the primary concern, and you are working in an environment with a JPG decoder available (web browsers, modern smartphones, Linux systems with libjpeg).

Bottom line: BMP 256 color occupies a specific, irreplaceable niche. It is the only major image format that combines indexed color (small per-pixel data), zero compression (trivial parsing), and widespread tool support. For embedded systems, legacy Windows apps, and retro game development, it remains the right choice in 2025 and beyond.

Frequently Asked Questions

A 256 color bitmap is an 8-bit BMP file. It stores image data using a single byte per pixel, where each byte value (0–255) is an index into a color table that contains exactly 256 RGBQUAD entries. The file format is a standard Windows Bitmap (.bmp) with bit depth set to 8 and a 1024-byte color table embedded between the header and pixel data. It is also called a "paletted BMP," "indexed BMP," or "BMP 8-bit." The format is standardized by Microsoft and supported by virtually all image processing software and embedded display SDKs.
Yes, absolutely. This free online tool converts JPG or JPEG images to BMP 256 color (8-bit) entirely in your browser. You simply upload your JPG, click Convert, and download the resulting .bmp file. No software to install, no account required, and your image is never uploaded to any server — the conversion runs locally using your browser's JavaScript engine and Canvas API. The output is a fully standards-compliant 8-bit BMP file ready for use in any application.
Neither format is universally "better" — they serve different purposes. JPEG excels at storing photographs with small file sizes using lossy compression. It is ideal for web use, photography, and any system with a JPEG decoder. BMP 8-bit excels at simplicity: it requires no decompression algorithm, has a trivial file structure, and is instantly readable byte-by-byte. It is the right choice for embedded microcontrollers, legacy Windows applications, and any environment where parsing simplicity outweighs file size concerns. For Arduino displays and retro game projects, BMP 256 color is objectively the better choice.
This tool specifically produces 8-bit (256 color) BMP files. To convert to 24-bit BMP (true color, no palette), you can use Microsoft Paint: open your image, go to File → Save As → BMP Picture → 24-bit Bitmap. In GIMP: open the image, go to File → Export As → change extension to .bmp → Export → keep color depth at 24 bits. In Photoshop: File → Save As → BMP → choose Windows and 24 Bits/Channel. Most image editors support 24-bit BMP export. If you specifically need 8-bit (256 color) BMP, this is the right tool.
256 color mode (also called 8-bit color mode) is a display or image standard where each pixel is represented by a single byte, allowing exactly 256 distinct colors to be displayed simultaneously. The 256 specific colors used are defined by a palette or color table that is stored alongside the image data. This was the standard PC display mode in the early 1990s (VGA Mode 13h at 320×200 resolution) and is still actively used today in embedded LCD displays, Game Boy-style homebrew development, microcontroller projects, and any system where memory is limited. The "256" comes from 2^8 = 256 possible values in one byte.
Several file formats support exactly 256 colors: BMP 8-bit (indexed, no compression), GIF (always limited to 256 colors using LZW compression), PNG 8-bit (indexed with optional transparency), PCX 8-bit (older format, rarely used today), and IFF/LBM (Amiga format). Of these, BMP 8-bit is the most commonly required for embedded systems because it requires no decompression and has the simplest file structure. GIF is widely used on the web for animations. PNG 8-bit is popular when transparency is needed in a 256-color context.
There are 256 colors in 8-bit color mode because a single byte (8 bits) can hold exactly 256 distinct values: 0 through 255 (2^8 = 256). When early PC video cards were designed, memory was extremely expensive, so designers chose 8 bits per pixel as a practical balance between color variety and memory consumption. At 320×200 resolution, an 8-bit framebuffer required only 64,000 bytes (~64KB) of video memory — affordable in the early 1990s. Even today, 256 remains a meaningful color limit for microcontrollers like the Arduino Uno (2KB RAM) where memory is still a critical constraint.
In terms of visual quality and color richness, yes — 24-bit (true color) is dramatically better. It supports 16,777,216 colors vs only 256, so photographs look perfectly smooth without any banding or palette artifacts. However, 24-bit BMP files are exactly 3× larger per pixel than 8-bit BMP files. A 320×240 image at 24-bit is ~230KB, while at 8-bit it is ~78KB. For embedded systems with limited storage and RAM, the smaller 8-bit format is preferred even at the cost of reduced color accuracy. The right choice depends on your hardware constraints and the type of image you are displaying.
In an 8-bit grayscale image, values range from 0 (pure black) to 255 (pure white). There is no value of "256" because 8 bits can only represent values 0 through 255. In a 256-color paletted BMP, there is no inherent meaning to any palette index — index 0 might be any color, including black or white, depending on how the palette was built during color quantization. The palette entries are ordered by frequency or median-cut algorithm, not by any fixed color meaning.
BMP 24-bit is lossless — it stores raw pixel data with absolutely no quality reduction. In this sense, it preserves quality perfectly. However, PNG 24-bit is equally lossless while producing much smaller files through DEFLATE compression. BMP is not "higher quality" than PNG or TIFF — they can be pixel-identical. BMP's advantage is not quality but simplicity: its uncompressed, straightforward structure makes it easy to read and write with minimal code. For 8-bit BMP (256 colors), quality is limited by the palette reduction step, not the format itself.
Yes, BMP files are actively used in several important fields in 2025. Embedded systems (Arduino, STM32, ESP32) use BMP because it requires no decoder library and is trivially simple to read from SD cards. Retro game development and emulation use BMP for historical accuracy and toolchain compatibility. Legacy Windows applications (VB6, MFC, Win32) still use BMP as their primary resource format for UI graphics. Industrial HMI panels, medical devices, and point-of-sale terminal displays often require BMP for their on-screen graphics. Windows itself still uses BMP for wallpapers and Paint's default format.
Standard BMP 24-bit is completely lossless — it stores every pixel's exact RGB value with no quality reduction whatsoever. However, converting to BMP 8-bit (256 colors) does involve quality loss through color quantization: your image's millions of colors are reduced to the best 256, and every pixel is re-colored to its closest match. This causes color banding in photographs and smooth gradients. Flat-color graphics, logos, and icons are largely unaffected because they already use a small set of distinct colors. Once saved as 8-bit BMP, re-saving the file multiple times causes no additional quality loss (unlike JPEG, which re-encodes and degrades quality each save).

Who Uses JPG to BMP 256 Color Conversion?

This tool serves a focused audience with specific, technical needs. Unlike general image converters, a JPG to BMP 8-bit online tool attracts users who know exactly what they need and why. Here are the primary user groups:

Embedded systems developers and makers

Engineers and hobbyists building projects with Arduino, ESP32, STM32, and similar microcontrollers who want to display images on small TFT LCD screens. They need BMP 256 color because it is the easiest format to load from an SD card with minimal code and memory. A maker building a retro weather station, a game console, or a smart picture frame will commonly need this exact conversion before loading graphics onto their device.

Retro game developers

Indie developers building games for retro platforms, DOS emulators, early Windows-style environments, or Game Boy-inspired homebrew projects. These projects historically used 256-color paletted graphics as their primary visual format. Converting modern JPG artwork into BMP 256 color is a necessary step in the asset pipeline. Tools like DOSBox, SDL 1.x, and Allegro 4.x all natively support 256-color BMP loading.

Legacy Windows application maintainers

Developers maintaining old enterprise software built in Visual Basic 6, MFC (Microsoft Foundation Classes), or early Win32 API that uses BMP bitmap resources for its user interface. When these applications need updated graphics, the new artwork must be converted to the exact BMP format the old code expects — typically 8-bit, 256-color Windows Bitmap format. This tool produces exactly that output.

Industrial and medical device engineers

Engineers working on HMI (Human-Machine Interface) panels, industrial touchscreens, medical monitoring equipment, and point-of-sale systems often work with proprietary firmware that requires BMP images in specific bit depths. Many of these systems were designed decades ago and still run on hardware that expects 8-bit BMP format for on-screen graphics. Converting updated interface artwork to 256-color BMP is a regular task for firmware update projects.

Pixel artists and lo-fi digital artists

Artists working in the lo-fi, retro aesthetic who intentionally want the 256-color palette limitation as a creative constraint. Converting a modern photograph or digital painting to 256-color BMP creates a distinctive "VGA era" visual style. The color banding and palette dithering that most users see as a limitation become an intentional aesthetic choice for this group.

🏆 ImageConverter24 is the go-to free online tool for JPG to BMP 256 color conversion. It runs 100% in your browser — no file uploads, no watermarks, no signup. It produces fully standards-compliant 8-bit BMP files with median-cut quantization, ready for Arduino displays, embedded systems, legacy software, and retro game development. The only specialized tool on the web built specifically for this purpose.