RGB 32x16

Buenas noches

Estoy haciendo un proyecto en el cual consiste en mostrar texto en movimiento e imágenes me tope con este código que al hacer pruebas funciona y muestra la información pero no logro entender del todo el código me gustaría que alguien me ayudara se tan amable explicarme que hace y que necesitaría para mostrar una imagen
de antemano gracias…

#include <Adafruit_GFX.h> // Core graphics library
#include <RGBmatrixPanel.h> // Hardware-specific library

// Similar to F(), but for PROGMEM string pointers rather than literals
#define F2(progmem_ptr) (const __FlashStringHelper *)progmem_ptr

#define CLK 8 // MUST be on PORTB! (Use pin 11 on Mega)
#define LAT A3
#define OE 9
#define A A0
#define B A1
#define C A2
// Last parameter = ‘true’ enables double-buffering, for flicker-free,
// buttery smooth animation. Note that NOTHING WILL SHOW ON THE DISPLAY
// until the first call to swapBuffers(). This is normal.
RGBmatrixPanel matrix(A, B, C, CLK, LAT, OE, true);
// Double-buffered mode consumes nearly all the RAM available on the
// Arduino Uno – only a handful of free bytes remain. Even the
// following string needs to go in PROGMEM:

const char str PROGMEM = “REPARACION DE EQUIPO DE COMPUTO CELULARES Y MAS !”;

int textX = matrix.width(), textMin = sizeof(str) * -12, hue = 0;

void setup() {
matrix.begin();
matrix.setTextWrap(false); // Allow text to run off right edge
matrix.setTextSize(1);
}

void loop() {

// Clear background
matrix.fillScreen(0);

// Draw big scrolly text on top
matrix.setTextColor(matrix.Color888(0, 0, 128, true));

// textX is equal to current text column;
int row = 20;
matrix.setCursor(textX, row);
matrix.print(F2(str));

// Move text left (w/wrap)
if((–textX) < textMin) textX = matrix.width();

// Update display
matrix.swapBuffers(true);
delay(50);

}