Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: Steeling le Février 05, 2023, 11:58:58 pm

Titre: Texture.update() ne donne pas le résultat attendu
Posté par: Steeling 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;
}
Titre: Re: Texture.update() ne donne pas le résultat attendu
Posté par: sabitas53 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 (https://geometrydashsubzero.net)
    }
    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 ?