Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SFML] opérations manuelles sur les pixels

Sujet résolu
    12 août 2008 à 13:33:22

    bonjour!

    je me sers de la sfml depuis peu de temps, et je voudrais savoir si utiliser
    une fonction comme celle ci est approprié:

    void setAlpha(sf::image& image, unsigned char alpha)
    {
    	sf::Color color;
    	
    	for(int y=0; y<image.GetWidth(); y++)
    	{
    		for(int x=0; x<image.GetWidth(); x++)
    		{
    			color=image.GetPixel(x, y);
    			color.a=alpha;
    			image.SetPixel(x, y, color);
    		}
    	}
    }
    


    ou alors existe-il une fonction moins lourde?
    merci ^^
    • Partager sur Facebook
    • Partager sur Twitter
      12 août 2008 à 14:09:36

      Citation : Hertzien'

      Ta boucle est fausse


      La précision est un outil de compréhension.
      Je vois deux erreurs (je ne me connais pas en SFML):
      • void setAlpha(sf::image& image, unsigned char alpha);
        {
            //....
        }
        

        Ce n'est pas un prototype, donc enlenver le point-virgule serait un début.
      • for(int y=0; y<image.GetWidth(); y++)
        	{
        		for(int y=0; y<image.GetWidth(); y++)
        		{
        			color=image.GetPixel(x, y);
        			color.a=alpha;
        			image.SetPixel(x, y, color);
        		}
        	}
        

        Ce code n'a aucun sens, tu reboucles la même variable.
        Essaies ceci:
        for(int x=0; x<image.GetWidth(); x++)
        	{
        		for(int y=0; y<image.GetWidth(); y++)
        		{
        			color=image.GetPixel(x, y);
        			color.a=alpha;
        			image.SetPixel(x, y, color);
        		}
        	}
        



      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        12 août 2008 à 14:18:41

        oussama1305 : ta deuxième correction n'a pas plus de sens que le premier code.
        for (x in Height)
        -> for (y in Width)
        -->...

        Si tu n'as qu'une seule couleur à changer il y a sf::Image::CreateMaskFromColor .
        • Partager sur Facebook
        • Partager sur Twitter
          12 août 2008 à 14:28:37

          Citation : Hiura

          oussama1305 : ta deuxième correction n'a pas plus de sens que le premier code.


          Ou bien j'ai oublié de préciser que je ne me connaîssait pas en SFML, ou bien j'ai l'Alzheimer.
          • Partager sur Facebook
          • Partager sur Twitter
            12 août 2008 à 14:44:00

            Je n'ai pas compris ce que tu veux faire, mais si ton soucis c'est la vitesse, va voir le dernier tuto de SFML celui sur les post-effects.

            Sinon, si ton code marche, ben t'as pas de problème.
            • Partager sur Facebook
            • Partager sur Twitter
              12 août 2008 à 18:56:43

              Il y a un moyen gratuit de faire la meme chose, en changeant simplement la couleur du sprite qui affichera ton image.
              • Partager sur Facebook
              • Partager sur Twitter
                12 août 2008 à 19:22:12

                J'ai une petite question :
                Peut-on changer une seule couleur dans un sprite s'il y en a plusieurs ? Par exemple, s'il y a dans un sprite du rouge et du vert, est-il possible de ne changer que le vert tout en gardant du rouge ?
                • Partager sur Facebook
                • Partager sur Twitter
                  12 août 2008 à 20:26:52

                  Bien sûr, mais là il faut revenir à la manipulation manuelle des pixels de l'image.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 août 2008 à 21:37:35

                    Donc on peut récupérer la couleur de chaque pixel, et si c'est celle que l'on veut changer on la change ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      13 août 2008 à 9:44:40

                      Citation : Laurent Gomila

                      Il y a un moyen gratuit de faire la meme chose, en changeant simplement la couleur du sprite qui affichera ton image.

                      Tu parles de sf::Drawable::SetColor ? (J'sais pas pourquoi mais à chaque fois que je lis la doc je saute cette fonction. :-° )
                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 août 2008 à 10:18:05

                        Citation : Pas de titre

                        Donc on peut récupérer la couleur de chaque pixel, et si c'est celle que l'on veut changer on la change ?


                        Oui, cf le tout premier code donné par le posteur dans cette discussion.

                        Citation : Pas de titre

                        Tu parles de sf::Drawable::SetColor ?


                        Oui.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 août 2008 à 14:06:06

                          milles excuses pour ces erreurs, mais bon ct juste à titre d'exemple :lol:
                          mais un setAlpha reviendrait-il à écrire:

                          int alpha=128;
                          sprite.SetColor(sf::Color(255,255,255,alpha);
                          


                          à moins que ça colore le sprite en blanc par dessus l'image?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            13 août 2008 à 15:44:55

                            La couleur du sprite est une couleur de modulation, càd qu'elle est multipliée avec les pixels de l'image, pas ajoutée. Donc 255 (= 1) sur un canal ne modifiera pas ce canal. Donc le code que tu donnes est ok ;)
                            • Partager sur Facebook
                            • Partager sur Twitter

                            [SFML] opérations manuelles sur les pixels

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown