SDL & normes du C

Voir le sujet précédent Voir le sujet suivant Aller en bas

SDL & normes du C

Message  Romu' le Mar 28 Oct 2008 - 14:04

... deux sujets apparemment sans relation, et pourtant !

Bonjour,

tout d'abord le problème concernant la bibliothèque SDL.
On peut lire dans tous les tutoriels que pour rendre une certaine couleur transparente dans une image on utilise la fonction dont le prototype est :

int SDL_SetColorKey(SDL_Surface *surface, Uint32 flag, Uint32 key);
Pour qu'une couleur sous forme d'une information "RGB" soit transformée en un nombre de type Uint32 on utilise :

Uint32 SDL_MapRGB(SDL_PixelFormat *fmt, Uint8 r, Uint8 g, Uint8 b);
Le fait est que dans certains cas, chez moi, ceci ne rend pas la couleur blanche transparente :
Code:

SDL_SetColorKey(masurface, SDL_SRCCOLORKEY, SDL_MapRGB(masurface->format, 255, 255, 255));
alors que le code retourné par la fonction indique que tout s'est bien passé.

Après un moment d'arrachage de cheveux, une idée m'est venue : sans entrer dans les détails, je me suis dit que si la valeur du noir c'est 0, le blanc c'est surement un nombre où tous les bits sont à 1, c'est à dire (sur 32 bits) : 4294967295 (0xFFFFFFFF). Voilà que ça marche ! Reste maintenant à savoir pourquoi, alors j'ai décidé de faire des tests :

SDL_MapRGB(...) renvoie : 16777215 (0xFFFFFF), ce qui est... presque ça ! Après réflexion je me suis dit que les 8 derniers bits sont là pour la composante alpha, mais je ne suis pas allé plus loin pour ne pas me perdre en suppositions.
J'ai cru à un problème de format mais rien ne me semble anormal (32 bits/pixel...).
Enfin bon si vous avez besoin d'une valeur, demandez-moi la.
Je ne vois pas où est le problème !

documentation : http://www.libsdl.org/cgi/docwiki.cgi/SDL_API
____________________________________
Maintenant, où est le rapport avec les normes du C ? Le voilà :
Au départ je n'ai donné comme valeur de constante que 4294967295, et c'est seulement après un avertissement du compilateur (qui me signale que cette constante ne sera pas signé qu'en ISO C90) que j'ai rajouté le suffixe U à la fin. Tout ça m'a amené à me poser la question : ISO C, ANSI C, C89 et C90 désignent-ils la même norme ? (pour ISO C et ANSI C il semblerait que oui).

Merci d'avance !

Romu'
Bavard
Bavard

Messages : 21
Date d'inscription : 09/07/2008
Age : 27
Localisation : France

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: SDL & normes du C

Message  -ed- le Mer 29 Oct 2008 - 2:43

Romu' a écrit:... deux sujets apparemment sans relation, et pourtant !

Bonjour,

tout d'abord le problème concernant la bibliothèque SDL.
Je ne connais pas grand chose à SDL.

On peut lire dans tous les tutoriels que pour rendre une certaine couleur transparente dans une image on utilise la fonction dont le prototype est :

int SDL_SetColorKey(SDL_Surface *surface, Uint32 flag, Uint32 key);
Pour qu'une couleur sous forme d'une information "RGB" soit transformée en un nombre de type Uint32 on utilise :

Uint32 SDL_MapRGB(SDL_PixelFormat *fmt, Uint8 r, Uint8 g, Uint8 b);
Le fait est que dans certains cas, chez moi, ceci ne rend pas la couleur blanche transparente :
Code:

SDL_SetColorKey(masurface, SDL_SRCCOLORKEY, SDL_MapRGB(masurface->format, 255, 255, 255));
alors que le code retourné par la fonction indique que tout s'est bien passé.
Ca dépasse mes compétences...

Après un moment d'arrachage de cheveux, une idée m'est venue : sans entrer dans les détails, je me suis dit que si la valeur du noir c'est 0, le blanc c'est surement un nombre où tous les bits sont à 1, c'est à dire (sur 32 bits) : 4294967295 (0xFFFFFFFF). Voilà que ça marche ! Reste maintenant à savoir pourquoi, alors j'ai décidé de faire des tests :

SDL_MapRGB(...) renvoie : 16777215 (0xFFFFFF), ce qui est... presque ça ! Après réflexion je me suis dit que les 8 derniers bits sont là pour la composante alpha,
Je ne sais pas ce que c'est. Je ne connais rien en graphisme... Juste que RVB est une combinaison de 3 valeurs de 0 à 255 et que 00 00 00 est noir et FF FF FF est blanc. C'est tout ce que je sais.
<...>

Tout ça m'a amené à me poser la question : ISO C, ANSI C, C89 et C90 désignent-ils la même norme ? (pour ISO C et ANSI C il semblerait que oui).
C ANSI, ANSI-C, ISO-C, C89 et C90 désignent la norme ISO dont le nom officiel est ISO/IEC 9899:1990

-ed-
Admin
Admin

Messages : 289
Date d'inscription : 26/05/2008
Age : 60
Localisation : Paris 6eme arrondissement (75, France)

Voir le profil de l'utilisateur http://bien-programmer.fr

Revenir en haut Aller en bas

Re: SDL & normes du C

Message  Romu' le Jeu 30 Oct 2008 - 13:42

J'ai posé cette question ici parce qu'en traînant sur les forums du Site Du Zéro j'ai cru comprendre que vous vous y connaissiez aussi en SDL.

Mais merci quand même pour la réponse à la question sur les normes !

Romu'
Bavard
Bavard

Messages : 21
Date d'inscription : 09/07/2008
Age : 27
Localisation : France

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: SDL & normes du C

Message  Contenu sponsorisé Aujourd'hui à 15:27


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum