1
Graphique / Le redimensionnement détruit mon image
« le: Juillet 27, 2019, 02:44:15 pm »
Bonjour,
je viens vers vous car je ne trouve pas de solution à mon problème.
Le but est d'effectuer un simple redimensionnement d'une partition pour l'afficher dans ma fenêtre SFML, je suis conscient que redimensionner signifie aussi perte de qualité, seulement ici, la partition devient illisible (des lignes disparaissent). Chose qui ne parvient pourtant pas avec un visionneur d'image standard. Pourriez-vous m'indiquer l'origine du problème et un moyen de parvenir à mes fins ?
J'ai essayé le redimensionnement via une "View", via un "sprite.setScale" mais le problème reste identique
et "sprite.setSmooth(true)" rends les choses meilleures mais pas encore assez ...
Puisque code et image aident toujours en voici :
(ici la perte de qualité est supportable, mais avec d'autres partitions c'est un carnage ...)
- test.jpg est la partition en question
- Capture.png est un rendu illustrant mon problème (à gauche SFML | à droite le visionneur Windows, tout deux avec la même dimension)
Enfin voici une synthèse de mon code :
test.jpg :
https://drive.google.com/file/d/1uOXqo2Bwq3ZLnmQiebdq3WdP_FQi41eh/view?usp=sharing
capture.png :
https://drive.google.com/file/d/18fgHPp-l4Gd6TOFRPudGLIn3UEwNhsk1/view?usp=sharing
je viens vers vous car je ne trouve pas de solution à mon problème.
Le but est d'effectuer un simple redimensionnement d'une partition pour l'afficher dans ma fenêtre SFML, je suis conscient que redimensionner signifie aussi perte de qualité, seulement ici, la partition devient illisible (des lignes disparaissent). Chose qui ne parvient pourtant pas avec un visionneur d'image standard. Pourriez-vous m'indiquer l'origine du problème et un moyen de parvenir à mes fins ?
J'ai essayé le redimensionnement via une "View", via un "sprite.setScale" mais le problème reste identique
et "sprite.setSmooth(true)" rends les choses meilleures mais pas encore assez ...
Puisque code et image aident toujours en voici :
(ici la perte de qualité est supportable, mais avec d'autres partitions c'est un carnage ...)
- test.jpg est la partition en question
- Capture.png est un rendu illustrant mon problème (à gauche SFML | à droite le visionneur Windows, tout deux avec la même dimension)
Enfin voici une synthèse de mon code :
int main() {
int width = sf::VideoMode::getDesktopMode().width*0.9;
int height = sf::VideoMode::getDesktopMode().height*0.9;
sf::RenderWindow window(sf::VideoMode(width, height), "Partition Reader");
sf::Texture morceauTexture;
morceauTexture.setSmooth(true);
sf::Sprite morceauSprite;
if (!morceauTexture.loadFromFile("./test.jpg"))
{
std::cout << "Failed to load page" << std::endl;
return -1;
}
morceauSprite.setTexture(morceauTexture);
float scale = std::min((float)(width)/morceauTexture.getSize().x, (float)(height)/morceauTexture.getSize().y);
morceauSprite.setScale(scale, scale);
morceauSprite.setPosition((width-morceauTexture.getSize().x*scale)/2,
(height-morceauTexture.getSize().y*scale)/2);
window.clear();
window.draw(morceauSprite);
window.display();
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed:
window.close();
break;
default:
break;
}
}
}
return 0;
}
int width = sf::VideoMode::getDesktopMode().width*0.9;
int height = sf::VideoMode::getDesktopMode().height*0.9;
sf::RenderWindow window(sf::VideoMode(width, height), "Partition Reader");
sf::Texture morceauTexture;
morceauTexture.setSmooth(true);
sf::Sprite morceauSprite;
if (!morceauTexture.loadFromFile("./test.jpg"))
{
std::cout << "Failed to load page" << std::endl;
return -1;
}
morceauSprite.setTexture(morceauTexture);
float scale = std::min((float)(width)/morceauTexture.getSize().x, (float)(height)/morceauTexture.getSize().y);
morceauSprite.setScale(scale, scale);
morceauSprite.setPosition((width-morceauTexture.getSize().x*scale)/2,
(height-morceauTexture.getSize().y*scale)/2);
window.clear();
window.draw(morceauSprite);
window.display();
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
switch (event.type)
{
case sf::Event::Closed:
window.close();
break;
default:
break;
}
}
}
return 0;
}
test.jpg :
https://drive.google.com/file/d/1uOXqo2Bwq3ZLnmQiebdq3WdP_FQi41eh/view?usp=sharing
capture.png :
https://drive.google.com/file/d/18fgHPp-l4Gd6TOFRPudGLIn3UEwNhsk1/view?usp=sharing