1
Graphique / 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 ?
Merci par avance pour tout conseil !
Ci-dessous, mon code :
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 ?
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;
}
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;
}