SDL & normes du C
2 participants
Page 1 sur 1
SDL & normes du C
... 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 :
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 !
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 :
Pour qu'une couleur sous forme d'une information "RGB" soit transformée en un nombre de type Uint32 on utilise :
int SDL_SetColorKey(SDL_Surface *surface, Uint32 flag, Uint32 key);
Le fait est que dans certains cas, chez moi, ceci ne rend pas la couleur blanche transparente :
Uint32 SDL_MapRGB(SDL_PixelFormat *fmt, Uint8 r, Uint8 g, Uint8 b);
- Code:
SDL_SetColorKey(masurface, SDL_SRCCOLORKEY, SDL_MapRGB(masurface->format, 255, 255, 255));
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
- Messages : 21
Date d'inscription : 09/07/2008
Age : 34
Localisation : France
Re: SDL & normes du C
Je ne connais pas grand chose à SDL.Romu' a écrit:... deux sujets apparemment sans relation, et pourtant !
Bonjour,
tout d'abord le problème concernant la bibliothèque SDL.
Ca dépasse mes compétences...
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 :Pour qu'une couleur sous forme d'une information "RGB" soit transformée en un nombre de type Uint32 on utilise :
int SDL_SetColorKey(SDL_Surface *surface, Uint32 flag, Uint32 key);Le fait est que dans certains cas, chez moi, ceci ne rend pas la couleur blanche transparente :
Uint32 SDL_MapRGB(SDL_PixelFormat *fmt, Uint8 r, Uint8 g, Uint8 b);alors que le code retourné par la fonction indique que tout s'est bien passé.
- Code:
SDL_SetColorKey(masurface, SDL_SRCCOLORKEY, SDL_MapRGB(masurface->format, 255, 255, 255));
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.
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,
<...>
C ANSI, ANSI-C, ISO-C, C89 et C90 désignent la norme ISO dont le nom officiel est ISO/IEC 9899:1990
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).
Re: SDL & normes du C
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 !
Mais merci quand même pour la réponse à la question sur les normes !
Romu'- Bavard
- Messages : 21
Date d'inscription : 09/07/2008
Age : 34
Localisation : France
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|