V okolju Windows lahko zapisemoemo tudi datoteko BMP, ki jo razume vecina programov (Panitbrush, Slikar, ...). Zal je format zahtevnejsi in je zato primeren le za pisanje iz nasih programov. Za branje pa bi bil primer bolj kompleksen, saj obstaja vrsto podformatov ter kompresij rastrskih podatkov. Pisanje datoteke se najlazje izvede v jeziku C, v Fortranu pa standardno to ni mogoce.
Primer programa, ki zapise 24-bitno RGB datoteko:
/* Primer pisanja Windows BMP datoteke za LITTLE-ENDIAN (PC) racunalnike LK98*/ #include <stdio.h> #define WIDTH 28 /* mnogokratnik stevila 4 */ #define HEIGHT 25 /* visina slike */ #define RED 2 #define GREEN 1 #define BLUE 0 int main() { struct { unsigned char _[2]; unsigned long FileSize : 32; unsigned char __[12]; unsigned long ImageWidth : 32; unsigned long ImageHeight : 32 ; unsigned char ___[8]; unsigned long SizeOfBitmap : 32; unsigned char ____[16]; } static header = { {'B', 'M'}, 0, { 0,0,0,0, 0x36, 0,0,0, 0x28, 0,0,0}, 0, 0, { 1,0, 0x18,0, 0,0, 0,0}, 0, {0x6d, 0x0b, 0, 0, 0x6d, 0x0b, 0,0,0,0,0,0,0,0,0,0} }; FILE *fbmp; int i, j; unsigned char img[HEIGHT][WIDTH][3]; /* Nastavimo glavo BMP datoteke */ header.ImageWidth = WIDTH; header.ImageHeight = HEIGHT; header.SizeOfBitmap = WIDTH * HEIGHT * 3; header.FileSize = header.SizeOfBitmap + 0x36; /* Celotna slika je crna */ for(i = 0; i < HEIGHT; i++) for(j = 0; j < WIDTH; j++) img[i][j][0] = img[i][j][1] = img[i][j][2] = 0; /* razen ene rumene pike spodaj levo */ img[0][0][RED] = 255 ; img[0][0][GREEN] = 255; fbmp = fopen("primer.bmp", "wb"); fwrite(&header, 0x36, 1, fbmp); fwrite(img, 3, WIDTH*HEIGHT, fbmp); fclose(fbmp); return 0; }