Questa pagina non vuole sostituire il manuale utente del software img2tile
(per questo c'è il README) ma fornire alcune indicazioni sul suo modo di operare, nonché per spiegare alcuni degli algoritmi utilizzati. Fornisce, inoltre, un esempio usando le primitive della libreria midres.
Le immagini possono essere preparate con qualsiasi programma di fotoritocco, come ad esempio GIMP. Le immagini devono, ovviamente, avere le dimensioni di un tile (8×8 pixels) o di un multiplo di un singolo tile (i.e. 32×24 pixel, 64×64 pixel, and so on). Sebbene il programma possa leggere moltissimi formati grafici, i risultati più precisi si ottengono utilizzando due colori molto contrastati (bianco / nero) e salvando usando il formato PNG a RGB (24 bit)
La funzione principale di questo programma è quella di convertire le immagini bitmap (da vari formati) in un “file charset”, adatto per il caricamento nella memoria dei caratteri dei più diffusi computer a 8 bit.
Il modo più semplice per spiegarne il funzionamento è fornire un esempio. Sotto c'è un'immagine 8×8 pixel di una “bomba” (bomb.png
).
Ogni pixel bianco disegnato sull'immagine è un pixel che deve essere rappresentato sul carattere da disegnare sullo schermo. Per convertire questa immagine in un carattere, si può chiamare il programma con le seguenti opzioni:
img2tile -i bomb.png -o tiles.bin
Al momento questo software gestisce solo font di 8×8 pixel. Per questo motivo, non è in grado di lavorare con immagini che non siano multipli di queste dimensioni. D'altra parte, il sistema è in grado di convertire immagini che sono multipli di queste dimensioni. Il meccanismo di conversione è semplice: l'immagine originale è divisa in tile. Ogni tile viene quindi rappresentata in sequenza. Quindi, se hai un'immagine di NxM pixel, img2tile
genererà (N/8)x(M/8) tile.
Ad esempio, l'immagine di un aeroplano (32×16 pixel, aeroplane.png
) occupa uno spazio di 3×2 tile, quindi verranno generati 6 tile, nel seguente ordine:
La riga di comando è la seguente:
img2tile -i aeroplano.png -o tiles.bin
Questo programma permette di convertire una serie di immagini, una dopo l'altra. È sufficiente fornire una serie di opzioni -i
. Le tessere generate saranno quindi scritte, sequenzialmente, nel file indicato dall'opzione -o
. Ad esempio, se si passano le immagini dell'aereo e della bomba sulla stessa riga di comando, il risultato è il seguente:
Segue la riga di comando:
img2tile -i airplane.png -i bomb.png -o tiles.bin
Dalla release 1.14 del programma è possibile generare tile multicolor con l'opzione -m
. In tal caso, quello che conta non è più la luminosità del singolo pixel ma il suo colore, inteso come RGB. In particolare, l'opzione permette di gestire tile che hanno fino a 4 colori.
Maggiori informazioni sono disponibili su questo tutorial, nella sezione su come si generano tile multicolor.
Il programma è in grado di generare un file include per il linguaggio C con i simboli necessari per identificare un tile all'interno del tileset (come “offset”). Il nome del simbolo avrà il prefisso TILE_
e deriva dal nome del file, secondo una logica molto semplice:
Ad esempio, nel caso precedente verranno creati i seguenti simboli:
#define TILE_AIRPLANE 0 #define TILE_BOMB 8
Inoltre, per ogni tile, verranno generati due simboli aggiuntivi:
TILE_xxx_WIDTH
, che conterrà la larghezza dell'immagine (in termini di tiles);TILE_xxx_HEIGHT
, che conterrà l'altezza dell'immagine (in termini di tiles).Ad esempio, nel caso precedente verranno creati i seguenti simboli:
#define TILE_AIRPLANE_WIDTH 4 #define TILE_AIRPLANE_HEIGHT 2 #define TILE_BOMB_WIDTH 1 #define TILE_BOMB_HEIGHT 1
Infine, saranno generati altri due simboli:
TILE_START
, che conterrà il primo indice del conto (0);TILE_COUNT
, che conterrà il conteggio totale dei tiles.La riga di comando segue:
img2tile -i aeroplano.png -i bomb.png -g header_tiles.h -o tiles.bin
Questo semplice programma carica tutte le tile preparate con l'ultimo comando img2tile
, e disegna una bomba gialla al centro dello schermo di default:
#include "midres.h" #include "header_tiles.h" mr_tileset_load("tiles.bin", MR_TILESET_0, TILE_START, TILE_COUNT); mr_tileset_visible(MR_TILESET_0); mr_puttile(MR_SCREEN_DEFAULT, MR_SCREEN_WIDTH >> 1, MR_SCREEN_HEIGHT >> 1, TILE_BOMB, MR_COLOR_YELLOW);