Yo me sumo... pero dado que he hecho preguntas tontas en el pasado, me temo que me auto-resto y nos quedamos igual

Futu: si el array lo haces de tipo BYTE, entonces te consumirá casi la misma memoria que un mapa de 8bits (256 colores), si el array es de tipo WORD, consumirá casi la misma memoria que un mapa de 16bits, y si es de tipo INT pues que un mapa de 32bits. Si sólo vas a guardar valores 0 y 1, y opcionalmente menores que 32) usa byte y se acabó (podrías usar menos bits, pero si estás preguntando esto, como te hable de máscaras binarias, te tiras por la ventana)

Otra cosa es el tiempo que se tarda: haz la prueba, un código que haga 100000 map_get_pixel antes de frame, y otro que lea los mismos valores de un array. La diferencia de velocidad se va a notar.
Pero es lo que decimos siempre: si esto es para ordenador, no vas a apreciar la diferencia, porque los ordenadores de hoy y de hace 10 años mueven eso y tres veces más, así que usa el método que más cómodo te sea.
Si se ralentiza el ordenador, o tienes la experiencia suficiente para saber que se va a ralentizar, entonces es cuando debes preocuparte del rendimiento. OJO, eso no significa que puedas derrochar los recursos como te de la gana ¡gasta con responsabilidad! No me gastes 1GB para tu programa de comics.