Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Guida SDL - Primo approccio alla trasparenza

Guida SDL

Capitolo 10° - Primo approccio alla trasparenza

<< Precedente Prossimo >>
Primo approccio alla trasparenza



    Con gli aspetti visti finora si potrebbe realizzare un menù, o al massimo un tetris, comunque di scarsa qualità. Le nostre possibilità cambiano radicalmente con l'utilizzo della trasparenza, tecnica tramite la quale è possibile stampare a video anche figure rotonde o irregolari.

    Ogni oggetto SDL_Surface può avere un colore di trasparenza diverso e, nel nostro esempio, utilizzando un'immagine a 8 bit ,ovvero una palette di 256 colori, è sufficiente utilizzare la funzione SDL_SetColorKey per impostare il colore di trasparenza. La logica è questa: quando disegno in *screen l'immagine interessata copio solo i pixel diversi da quello di trasparenza impostato tramite la funzione così richiamata:



if ( image->format->palette ) {

            SDL_SetColorKey(image, (SDL_SRCCOLORKEY|SDL_RLEACCEL),

                            *(Uint8 *)image->pixels);

    }



Questa riga di codice può essere inserita subito dopo

image = SDL_LoadBMP( "file_name.bmp" )
.



Il prototipo della funzione è il seguente:



int SDL_SetColorKey(SDL_Surface *surface,

  Uint32 flag, Uint32 key);



Ho optato per un'immagine ad 8 bit perché a profondità di colore maggiore si possono riscontrare dei problemi. In particolare con questa versione delle librerie si visualizza un brutto effetto visivo che "mi ha perseguitato" per parecchio tempo. Per ovviarlo, invece di cambiare versione della libreria, ho pensato di implementare una mia personale versione di blitting trasparente. Questa mi si è poi rivelata fondamentale per la realizzazione di un'applicazione definibile carina, anche perché fornisce altre possibilità, come ad esempio la rotazione dell'immagine e l'ingrandimento. Purtroppo non è affatto veloce, quindi ho dovuto cercare altre soluzioni.

Chi intende provare ad approfondire può passare all'APPENDICE 2, dove spiego logica e contenuti della mia implementazione.

Per chi abbia intenzione di utilizzare le funzioni predefinite può facilmente reperirle nella documentazione ufficiale, nulla di difficile se si possiede la versione giusta della libreria; quindi potete passare direttamente al capitolo successivo.

    Qui di seguito riporto come utilizzare la funzione SDL_SetColorKey anche con immagini di profondità di colore maggiore a 8 bit, dunque con i metodi true-color:



SDL_SetColorKey(image, SDL_SRCCOLORKEY | SDL_RLEACCEL,

                     SDL_MapRGB(image ->format, 0xff, 0x00, 0xff));

(0xff, 0x00, 0xff)
- indicano il colore RGB (red==255, green==0, blue==255), ovvero violetto, spesso come colore di default.

<< Precedente Prossimo >>
A proposito dell'autore

Laurea in Ingegneria Informatica. Dottorato in Neuroingegneria. Conosco i linguaggi C/C++, Java, Delphi, jsp e servlet, PHP, SQL, Bash, R, Matlab, Lisp. Esperienza con le librerie SDL e OpenGL, Ogre3D e Ode, MFC e CLR, Winsock. Conoscenza base di: VB, Assembly.