Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Texture.update() ne donne pas le résultat attendu  (Lu 6645 fois)

0 Membres et 1 Invité sur ce sujet

Steeling

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Texture.update() ne donne pas le résultat attendu
« le: Février 05, 2023, 11:58:58 pm »
Bonjour à tous,

J'essaie de faire un code tout simple (pour débuter) : j'affiche une image puis, après avoir cliqué dessus, le pixel cliqué se colore en bleu.

Malheureusement, j'ai beau cliquer, rien ne change. Il ne se passe absolument rien et je ne sais pas du tout pourquoi. J'ai eu beau afficher les valeurs des pixels dans la console avant et après, je vois qu'ils sont bien modifiés mais l'affichage ne le rend pas en compte. Je me suis donc demandé si le problème ne venait pas de mon utilisation de la fonction update. J'ai épluché la documentation mais je ne vois pas ce que je fais de mal.

Quelqu'un aurait-il une idée ?  ;D
Merci par avance pour tout conseil !

Ci-dessous, mon code :

sf::Image fill_shape(int x, int y, sf::Image img){

    sf::Image new_image = img;
    new_image.setPixel(x, y, BLUE);
    return new_image;
}

int main()
{
    // Load an image file from a file
    sf::Texture texture;
    if (!texture.loadFromFile("image.jpg")){
        return EXIT_FAILURE;
    }
    sf::Sprite sprite(texture);

    int x = sprite.getTexture()->getSize().x * sprite.getScale().x;
    int y = sprite.getTexture()->getSize().y * sprite.getScale().y;
    sf::RenderWindow window(sf::VideoMode(x, y), "Image Filler");

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed){
                window.close();
            }
            else if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
            {
                sf::Vector2i position = sf::Mouse::getPosition();
                int x = position.x;
                int y = position.y;
                sf::Image image = sprite.getTexture()->copyToImage();
                sf::Image new_image = fill_shape(x, y, image);
                texture.update(new_image);
                sprite.setTexture(texture);
            }
        }

        window.clear();
        window.draw(sprite);
        window.display();
    }

    return 0;
}

sabitas53

  • Newbie
  • *
  • Messages: 1
    • Voir le profil
Re: Texture.update() ne donne pas le résultat attendu
« Réponse #1 le: Décembre 19, 2023, 05:29:28 am »
Citer
J'essaie de faire un code tout simple (pour débuter) : j'affiche une image puis, après avoir cliqué dessus, le pixel cliqué se colore en bleu. geometry dash subzero
    }
    sf::Sprite sprite(texture);

    int x = sprite.getTexture()->getSize().x * sprite.getScale().x;
    int y = sprite.getTexture()->getSize().y * sprite.getScale().y;
    sf::RenderWindow window(sf::VideoMode(x, y), "Image Filler");

    while (window.isOpen())
    {
     
 

J'ai essayé et ça ne marche pas ! Y a-t-il une erreur dans ce paragraphe ou quelque chose comme ça ?

discoverypour

  • Newbie
  • *
  • Messages: 1
    • Voir le profil
Re: Texture.update() ne donne pas le résultat attendu
« Réponse #2 le: Septembre 19, 2024, 08:54:53 am »
J'ai essayé et ça ne marche pas ! Y a-t-il une erreur dans ce paragraphe ou quelque chose comme ça ? geometry dash lite

Évidemment, cela ne fonctionne pas, mais où est le problème ?

AllenCalderon

  • Newbie
  • *
  • Messages: 1
    • Voir le profil
Re: Texture.update() ne donne pas le résultat attendu
« Réponse #3 le: Octobre 03, 2024, 07:32:45 am »
Veuillez essayer d'exécuter ce code:
                                                                                                             geometry dash meltdown
#include <SFML/Graphics.hpp>

sf::Image fill_shape(int x, int y, sf::Image img){
    sf::Image new_image = img;
    sf::Color BLUE = sf::Color::Blue;  // Define BLUE
    new_image.setPixel(x, y, BLUE);    // Set the pixel color
    return new_image;
}

int main()
{
    // Load an image file from a file
    sf::Texture texture;
    if (!texture.loadFromFile("image.jpg")){
        return EXIT_FAILURE;
    }
    sf::Sprite sprite(texture);

    // Get window dimensions based on texture size
    int windowWidth = sprite.getTexture()->getSize().x * sprite.getScale().x;
    int windowHeight = sprite.getTexture()->getSize().y * sprite.getScale().y;
    sf::RenderWindow window(sf::VideoMode(windowWidth, windowHeight), "Image Filler");

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed){
                window.close();
            }
            else if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
            {
                // Get mouse position relative to the window
                sf::Vector2i position = sf::Mouse::getPosition(window);
                int x = position.x;
                int y = position.y;

                // Copy image from texture
                sf::Image image = sprite.getTexture()->copyToImage();
                sf::Image new_image = fill_shape(x, y, image);

                // Update the texture with the modified image
                texture.update(new_image);

                // No need to call sprite.setTexture again since it is already using texture
            }
        }

        window.clear();
        window.draw(sprite);
        window.display();
    }

    return 0;
}

Changements clés :
- Utilisation de sf::Mouse::getPosition(window) pour obtenir la position de la souris relative à la fenêtre.
- Correction de la couleur BLEU avec sf::Color::Blue.
- Mise à jour correcte de la texture avec texture.update(nouvelle_image).
« Modifié: Octobre 03, 2024, 04:44:42 pm par AllenCalderon »