39 votes

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 faire autrement ?

50voto

hmuelner Points 5311

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);

28voto

Zienek Points 281

Utiliser 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 permet d'enregistrer un fichier recadré au coin supérieur gauche de 128x128px.

4voto

Bart Points 10767

Puisque vous utilisez QPixmap, vous pouvez utiliser sa fonction méthode de copie et lui fournir un QRect pour effectuer la récolte proprement dite.

2voto

zkunov Points 1634

Il suffit d'utiliser les fonctions copy() de QPixmap.

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

Il est parfois préférable d'entourer une image. C'est-à-dire d'avoir une image qui fait partie d'une autre image ou, en d'autres termes, qui pointe vers une partie d'une autre image. De cette manière, l'image enveloppée ne nécessite pas de mémoire supplémentaire, à l'exception de son en-tête. Vous pouvez afficher ou sauvegarder l'image enveloppée sans souci. L'inconvénient est que l'image originale doit rester valide jusqu'à ce que vous utilisiez l'image enveloppée, et que si vous dessinez dans l'image enveloppée, cela affectera la source.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X