none
Grafica SDL - Controllare colore pixel RRS feed

  • Domanda

  • Salve avevo bisogno di una funzione che mi ritorni il colore di un pixel in formato RGB Uint 8

    Ne ho bisogno per creare una matrice h*w dove h è l'altezza dell'immagine e w è la sua larghezza,

    nella matrice ho bisogno di avere il valore 0 (zero) dove e presente  un certo colore di cui ho il codice e dove non è presente questo colore devo avere 1 come posso fare???

    Grazie in anticipo per le risposte!

    mercoledì 4 aprile 2012 16:48

Risposte

  • La libreria SDL prevede la gestione delle collisioni :

    http://www.sdltutorials.com/sdl-collision

    http://www.sdltutorials.com/sdl-collision-events

    Se però vuoi farti da solo questa gestione è sicuramente altrettanto complicato che utilizzare quanto già preparato.

    Il tutorial che hai trovato su come gestire in modo generico la collisione mi sembra comunque già molto chiaro.

    Quindi se quello che ti occorre è ottenere da una SDL_Surface il colore di un determinato pixel puoi semplicemente accedere alla struttura costruendoti una funzione tipo questa :

    unsigned int getpixelcolor (const SDL_Surface& sdlsurf , int x, int y)

    {

         return ( (unsigned int*) sdlsurf.pixels )[ y * ( sdlsurf.pitch / sizeof( unsigned int ) ) + x ];

     }

    Non ho provato a compilare questa riga di codice (non ho le librerie SDL) ma dovrebbe funzionare o almeno spiegarti il principio di come operare.

      

    Guglielmo


    giovedì 26 aprile 2012 12:19

Tutte le risposte

  • Grafica SDL intendi questa sdl ?

    Io ti consiglio di provare a chiedere nei Forum di quel sito dove hai sicuramente possibilità di trovare persone che sviluppano con quel sistema.


    Guglielmo

    mercoledì 18 aprile 2012 13:16
  • Ciao Valenzavo,

    potresti fornire maggiori dettagli riguardo al tuo problema?


    Nicolò Zilio
    Personal blog: http://nicolozilio.wordpress.com/(With technical articles)
    Personal Web site: http://nicolozilio.altervista.org/

    martedì 24 aprile 2012 05:20
    Moderatore
  • Nel dettaglio avrei bisogno di imparare a gestire le collisioni tra due sprite.
    Nel mio programma di prova faccio muovere un piccolo Super Mario su uno sfondo fisso, e vorrei poter saltare sopra a un cubo. Sia Mario che il cubo sono immagini caricate con la funzione SDL_LoadBMP. Per far ciò ho trovato una guida che spiega come bisogni creare una matrice per ogni immagine, delle dimensioni dell'immagine, e riempirla di 0 dove è presente il colore di trasparenza, di 1 dove non è presente. Infatti, dato che gli sprite altro non sono che "rettangoli" con la nostra immagine all'interno, usando il colore di trasparenza posso tagliare lo sfondo in eccesso, ed usare, ad esempio, il mio personaggino. Mi serve, quindi, nel momento in cui salto su un cubo, che se uno "0" o un "1" incontra un altro "0", queste immagini non inneschino nessun evento, ma se un "1" incontra un "1", allora l'evento da innescare è cambiare la posizione del mio sprite, e metterlo sopra il cubo.

    Qui la guida che ho guardato: http://www.autistici.org/darko/collision.php
    giovedì 26 aprile 2012 11:05
  • La libreria SDL prevede la gestione delle collisioni :

    http://www.sdltutorials.com/sdl-collision

    http://www.sdltutorials.com/sdl-collision-events

    Se però vuoi farti da solo questa gestione è sicuramente altrettanto complicato che utilizzare quanto già preparato.

    Il tutorial che hai trovato su come gestire in modo generico la collisione mi sembra comunque già molto chiaro.

    Quindi se quello che ti occorre è ottenere da una SDL_Surface il colore di un determinato pixel puoi semplicemente accedere alla struttura costruendoti una funzione tipo questa :

    unsigned int getpixelcolor (const SDL_Surface& sdlsurf , int x, int y)

    {

         return ( (unsigned int*) sdlsurf.pixels )[ y * ( sdlsurf.pitch / sizeof( unsigned int ) ) + x ];

     }

    Non ho provato a compilare questa riga di codice (non ho le librerie SDL) ma dovrebbe funzionare o almeno spiegarti il principio di come operare.

      

    Guglielmo


    giovedì 26 aprile 2012 12:19