2.2. Tipi

Imel ridefinisce pochi tipi esistenti nella GNU C Library; in queste poche occasioni in cui è stato fatto, la motivazione è quella di rendere un codice scritto con Imel il più autoesplicativo possibile.

2.2.1. Valori booleani


typedef enum { false = 0, true = 1 } bool;

Questo tipo, nel caso Imel sia usata in un sorgente C++, non viene dichiarato in quanto il C++ lo ha di default. Come è facilmente intuibile questo tipo serve tutte le volte in cui si ha bisogno di operare con valori booleani che possono assumere solo valori di vero ( 1 ) o falso ( 0 ).

2.2.2. Dimensione immagini


typedef uint32_t ImelSize;

Il tipo ImelSize serve ad identificare quei valori che comprendono la dimensione di un'immagine e un punto all'interno di essa, in quanto una variabile dichiarata con questo tipo non può assumere valori negativi ed è quindi perfetta per essere usata per identificare dei punti nell'immagine senza costringere ad eseguire ulteriori controlli per accertare se il suo valore è lecito.

2.2.3. Valori dei colori


typedef uint8_t ImelColor;

Questo tipo è usato per identificare il valore di un canale RGB ovvero per valori che vanno da 0 a 255, anche se questo tipo consente di arrivare a 512, se usato con le funzioni per i colori viene automaticamente portato al massimo di 255.

2.2.4. Identificazione Pseudo-Livelli


typedef int32_t ImelLevel;

ImelLevel è un tipo utilizzato da Imel per identificare i valori di quel canale particolare di cui abbiam parlato precedentemente, che se assume valori positivi viene identificato come pseudo-livello mentre, se è negativo viene interpretato come trasparenza che va da -1 a -255.

Uno pseudo-livello altro non è che un valore di "importanza" che un pixel può assumere. Un pixel di importanza minore non potrà mai andare a sovrascrivere un pixel maggiore, ad esempio nel disegno di una linea posso farla disegnare con pixel di importanza 3 se successivamente disegno una linea con pixel di importanza 2 e questa passa per uno stesso punto in cui era stata disegnata quella di importanza 3 quel punto rimarrà di proprietà della linea con importanza 3 senza essere sovrascritto dalla 2.