No, los tamaños de los mapas son de tipo INT = 4Bytes. Luego los datos ocupan 1Byte por pixel en mapas de 8 bits, 2Bytes (1 WORD) por pixel en mapas de 16bits, y 4Bytes (1 INT) en mapas de 32 bits.
Te paso el include que usaba para un programa que me cambiaba los pixels de un color por los de otros. Siento no poder limpiártelo.
El proceso está en la última función: ahí te guarda los datos como BMP, como FGC (el formato que iba a sustituir a los FPG), como MAP o como FPG. Es importante que mires cuándo se guardan las "cabeceras", las paletas y los datos (eso se dice en las funciones más atrás). Los FPG comparten muchos datos con los MAPs, por lo que es posible que veas que se mezclan unas cosas con otras.
Al final, lo que tienes que ver es qué tipo de dato se usa en cada FWRITE (ya sabes: BYTE = 8bits, WORD = 16bits, INT = 32bits).
Si tienes alguna duda, hasta el miércoles no creo que te pueda hacer una versión límpia.
De todas formas, en Java, los arrays dinámicos ya vienen hechos, sólo necesitas una int List(), por ejemplo, y empezar a usar add(int), no tienes ni que reservar memoria.