web-dev-qa-db-fra.com

Comment recadrer une image dans Qt?

Je charge une image PNG dans un QPixmap/QImage et je veux la recadrer. Existe-t-il une fonction qui fait cela dans Qt, ou comment dois-je le faire autrement?

35
sashoalm

Vous pouvez utiliser QPixmap :: copy :

QRect rect(10, 20, 30, 40);
QPixmap original('image.png');
QPixmap cropped = original.copy(rect);

Il y a aussi QImage :: copy :

QRect rect(10, 20, 30, 40);
QImage original('image.png');
QImage cropped = original.copy(rect);
42
hmuelner

Utilisez QImage au lieu de QPixmap:

    QImage image("initial_image.jpg");
    QImage copy ;
    copy = image.copy( 0, 0, 128, 128); 
    copy.save("cropped_image.jpg");

Ce code enregistrera un fichier recadré dans le coin supérieur gauche 128x128px.

28
Zienek

Puisque vous utilisez QPixmap, vous pouvez utiliser son méthode de copie et lui fournir un QRect pour effectuer le recadrage réel.

4
Bart

Utilisez simplement les fonctions copy () de QPixmap.

Ce texte est le résultat de la lecture du premier commentaire sur votre question:

Parfois, il vaut mieux envelopper une image. C'est d'avoir une image qui fait partie d'une autre image ou en d'autres termes pointe vers une partie d'une autre image. C'est ainsi que l'image encapsulée ne nécessite pas de mémoire supplémentaire, à l'exception de son en-tête. Vous pouvez afficher ou enregistrer l'image enveloppée sans soucis. L'inconvénient est que l'image d'origine doit rester valide jusqu'à ce que vous utilisiez l'image encapsulée, également si vous dessinez dans l'image encapsulée, cela affectera la source.

2
zkunov