Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - SDL, è possibile settare il colore ad Alpha in una superfice che valga solo per un determinato colore?
Forum - C/C++ - SDL, è possibile settare il colore ad Alpha in una superfice che valga solo per un determinato colore?

Avatar
xsubzerox (Normal User)
Newbie


Messaggi: 5
Iscritto: 30/04/2010

Segnala al moderatore
Postato alle 16:35
Domenica, 09/05/2010
Esiste la funzione SDL_SetAlpha( , , ) ma imposta la trasparenza (in base al valore di alpha che si passa come parametro)  su tutta la superficie che si passa come parametro, io vorrei sapere come poter settare il valore della trasparenza solo ad un determinato colore presente nell'immagine...
Non mi interessa sapere come impostare il colorKey, io voglio che per esempio in un'immagine solo il colore nero appaia più trasparente, ma che si veda ancora...
spero di essere stato chiaro.. :)
grazie in anticipo...
;)

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1787
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 17:20
Lunedì, 10/05/2010
crea un'immagine di tipo RGBA a 32bit (8 bit per 4 canali).
Esegui un blit della tua JPG, dopodichè scansiona con un ciclo for tutti i pixel dell'immagine.
Fai il confronto con il colore che vuoi rendere trasparente, e ogni volta che lo trovi, setti il suo canale alpha al valore desiderato.

Per eseguire questa procedura sfrutta la funzione SDL_RGBA() e ricordati che per accedere ai singoli pixel devi fare una cosa simile:

Codice sorgente - presumibilmente C/C++

  1. // Leggo il pixel in posizione (30, 40)
  2. int x = 30;
  3. int y = 40;
  4.  
  5. SDL_Surface* pImage = SDL_LoadImg("Ciao.jpg");
  6.  
  7. UInt8* pData = (UInt8 *)pImmagine->pixels;
  8.  
  9. UInt8 r, g, b;
  10.  
  11. pData += 3 * ( x + pImage->width * y );
  12.  
  13. r = pData[0];
  14. g = pData[1];
  15. b = pData[2];
  16.  
  17. // Confronto le componenti rgb con il colore di riferimento
  18.  
  19. // ...
  20.  
  21. // setto il valore di alpha al 25% (64) sull'immagine di destinazione
  22. pDest[x + pDest->width * y] = SDL_RGBA(pDest->fmt, r, g, b, 64);
  23.  
  24. // Da notare che pDest ha un pixel format di tipo RGBA 32bit, mentre pImage ha un pixel format RGB 24bit



Considera che questo codice è scritto a memoria, senza riguardare la documentazione, quindi prendilo con la dovuta cautela...

Ciao!

Ultima modifica effettuata da TheKaneB il 10/05/2010 alle 17:22


Software Failure: Guru Meditation
Forum su Informatica, Elettronica, Robotica e Tecnologia: http://www.nonsoloamiga.com
PM Quote