Nuevamente la solución es usar el Tbitmap.scanline
Creas un objeto Tbitmap, defines propiedades de bits por pixel a 8 bits, imagen de tipo "dib", ancho y alto. Luego con scanline vas llenando la información del Tbirmap (cada pixel es un byte en tu archivo, asi que posiblemente puedas optimizar aún más usando "move()" linea a linea teniendo cuidado de no pasar de los límites del área de memoria para cada linea), luego un saveToFile y listo.
//crear
...
HandleType:= bmDIB;
PixelFormat = pf8bit;
...
Mas detalles en:
http://www.clubdelphi.com/foros/showthread.php?t=17427