Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: gaulois94 le Juin 28, 2012, 10:05:16 pm

Titre: Modification pixel par pixel d'un sprite sans texture, possible ?
Posté par: gaulois94 le Juin 28, 2012, 10:05:16 pm
Bonsoirs,

voila j'aimerai savoir si c'est possible de pouvoir modifié un sf::Sprite pixel par pixel sans que ce dernier possède de sf::Texture ? Imaginons que j'ai un Sprite qui ne possède pas de sf::Texture à qui je lui fait un setColor(). Le sprite pourra donc être représenté à l'écran. Comment faire pour modifier les pixels de ce sf::Sprite ? En effet avant, je dois passer par un sf::Image (obtenue grâce à un sf::Texture) pour modifier les pixels de mon image. C'est sympa c'est vrai mais lors de mon exemple précédent, il n'y a pas de sf::Texture donc je ne peux pas avoir de sf::Image. Comment faire alors ?

Merci d'avance ;) .
Titre: Re : Modification pixel par pixel d'un sprite sans texture, possible ?
Posté par: Laurent le Juin 29, 2012, 08:26:28 am
Un truc composé de pixels, ça reste une texture quoiqu'il arrive, même si tu modifies les pixels toi-même un à un.

Si tu veux faire ça une fois à l'init alors tu peux utiliser sf::Image et sa fonction setPixel, puis Texture::loadFromImage ; si tu veux le faire en temps réel alors il faudra travailler sur un tableau de pixels et utiliser Texture::update.

sf::Uint8 image[width * height * 4];
sf::Texture texture;
texture.create(width, height);
sf::Sprite sprite(texture);

// remplis / modifie "image"

texture.update(image);
Titre: Re : Modification pixel par pixel d'un sprite sans texture, possible ?
Posté par: gaulois94 le Juin 29, 2012, 12:42:57 pm
Merci, mais pourrais tu expliquer ce qu'est un sf::Uint s'il te plait ? Je ne le trouve pas dans la documentation.
Titre: Re : Modification pixel par pixel d'un sprite sans texture, possible ?
Posté par: Laurent le Juin 29, 2012, 04:31:59 pm
C'est un entier non signé de 8 bits. C'est juste un typedef.
Titre: Re : Modification pixel par pixel d'un sprite sans texture, possible ?
Posté par: gaulois94 le Juin 30, 2012, 04:50:37 pm
Et avec ton code je n'ai pas ce que je veux. Je veux simplement obtenir une texture à partir d'un sprite. Imaginons que mon sprite est obtenue par un setColor, mon sprite aura une couleur (sans blague !!!). J'aurai aimé le retranscrire dans une texture.
Titre: Re : Modification pixel par pixel d'un sprite sans texture, possible ?
Posté par: Laurent le Juin 30, 2012, 05:58:45 pm
La couleur du sprite c'est autre chose, ça n'a rien à voir avec la texture. Tu peux toujours l'utiliser quelque soit le contenu de la texture.

Après, si ce que tu veux c'est partir d'une image de couleur plutôt que noire ou blanche, tu peux aussi. C'est pas très compliqué de remplir un sf::Image ou un tableau de pixels avec une couleur unique.

Tu devrais aussi expliquer la finalité de ce que tu cherches à faire, sinon on risque de te donner des pistes non pertinentes ;)
Titre: Re : Modification pixel par pixel d'un sprite sans texture, possible ?
Posté par: gaulois94 le Juin 30, 2012, 06:10:43 pm
Te souvient tu de la fonction roundEdge poster avant ? Elle récupère la texture d'un sprite et la modifie pixel par pixel pour avoir droit à un arrondie. Si un sprite ne possède pas une texture, je ne pourrai pas appliquer cette fonction puisqu'elle n'a pas de texture.
Titre: Re : Modification pixel par pixel d'un sprite sans texture, possible ?
Posté par: Laurent le Juin 30, 2012, 07:16:55 pm
Dans ce cas, génère une nouvelle texture remplie de la couleur du sprite, et applique ta fonction dessus.
Titre: Re : Modification pixel par pixel d'un sprite sans texture, possible ?
Posté par: gaulois94 le Juin 30, 2012, 07:38:52 pm
Ceci marcherai uniquement si un sprite n'est constitué que d'une couleur ou que d'une texture. Es-ce le cas ? (j'essaye dans ma bibliothèque de recouvrir le plus de cas possible ;) ).
Titre: Re : Modification pixel par pixel d'un sprite sans texture, possible ?
Posté par: Laurent le Juin 30, 2012, 08:10:03 pm
Dans ce cas il suffit de multiplier texture et couleur pour reproduire les pixels finaux.

Ou alors rendre le sprite sur un RenderTexture.
Titre: Re : Modification pixel par pixel d'un sprite sans texture, possible ?
Posté par: gaulois94 le Juin 30, 2012, 08:30:20 pm
Bon ben je crois que je vais devoir utiliser la sf::RenderTexture (que j'aime pas d'ailleurs car assez lent sur mon pc :p ). Merci encore ;) .