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

Auteur Sujet: Le redimensionnement détruit mon image  (Lu 942 fois)

0 Membres et 1 Invité sur ce sujet

Demolyde

  • Newbie
  • *
  • Messages: 8
    • Voir le profil
    • E-mail
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 :
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;
}
 

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
« Modifié: Août 03, 2019, 11:11:25 pm par Demolyde »