Salut!
J'ai utilisé sf::View et la fonction "Viewport()" pour faire des bandes noires. Avec ce bout de programme, l'image est ajustée à la fenêtre en laissant des bandes noires horizontales ou verticales, selon la proportion entre la fenêtre et l'image.
Voici l'extrait:
// Je passe la déclaration des variables; leur nom devrait être explicite
// Dimensions du "output" de "view_1"
View_1.setSize(largeur_ecran, hauteur_ecran);
// Position du centre du "input" de "view_1"
View_1.setCenter(largeur_image/2, hauteur_image/2);
// Déterminer s'il faut des bandes horizontales ou verticales
if (hauteur_ecran/largeur_ecran < hauteur_image/largeur_image)
// Fenêtre plus large que l'image (relativement à leur hauteur)
// Bandes à-gauche et à-droite
{ // Définir la proportion entre le "input" et le "output" de "view_1" pour que le haut et le bas correspondent
View_1.zoom(hauteur_image/hauteur_ecran);
// Ne représenter que la zone "input" (et pas un élément extérieur pouvant par-exemple glisser dedans), et la représenter au-centre de la fenêtre
View_1.setViewport({(1-largeur_image*hauteur_ecran/hauteur_image/largeur_ecran)/2, 0, largeur_image*hauteur_ecran/hauteur_image/largeur_ecran, 1});
}
else
// Fenêtre plus haute que l'image (relativement à leur largeur), ou formats équivalents
// Bandes en-haut et en-bas
{ // Définir la proportion entre le "input" et le "output" de "view_1" pour que la gauche et la droite correspondent
View_1.zoom(largeur_image/largeur_ecran);
// Ne représenter que la zone "input" (et pas un élément extérieur pouvant par-exemple glisser dedans), et la représenter au-centre de la fenêtre
View_1.setViewport({0, (1-hauteur_image*largeur_ecran/largeur_image/hauteur_ecran)/2, 1, hauteur_image*largeur_ecran/largeur_image/hauteur_ecran});
}
// Attribuer "view_1" à "RenderWindow_1"; je crois qu'il n'y a pas besoin de le refaire en cas de modification de "view_1", mais il faudrait vérifier
RenderWindow_1.setView(View_1);