2017-09-17 3 views
1

Mon application doit gérer d'énormes images (> 1 Go). Mon point de départ était l'exemple de visionneuse d'image que vous pouvez trouver dans le dossier du widget lorsque vous installez QT5. Le problème avec cet exemple est qu'il ne semble pas approprié de manipuler des images énormes comme celles que je dois manipuler. Lorsque vous effectuez un zoom avant et arrière, la mise à jour prend une éternité et, par conséquent, l'expérience utilisateur n'est pas assez bonne.Charger des images volumineuses dans une fenêtre QT et être capable de zoomer et dézoomer

J'aurais besoin de quelque chose comme l'application Windows Photos. Le chargement de l'image peut prendre beaucoup de temps, mais une fois terminé, vous pouvez zoomer et dézoomer très rapidement. Mais j'ai besoin de construire une telle application avec C++ et QT, de sorte que plus tard je peux faire des calculs de fils sur les pixels. Quelqu'un sait-il un exemple que je peux prendre pour construire une telle application, c'est-à-dire un chargeur d'images à travers la bibliothèque QT pour que je puisse zoomer et dézoomer ces images en douceur?

Merci à l'avance

Répondre

0

Pourriez-vous essayer d'utiliser un QGraphicsArea?

Trouver un moyen de couper l'image en petites sections. Ensuite, chaque fois que la fenêtre de la zone graphique change, diffusez uniquement les carrés visibles dans la zone graphique.

0

La manière dont une application réelle gère cela est un mélange de mappage et de mappage de mip. Le mappage de MIP consiste techniquement à déplacer des versions à résolution inférieure d'une image dans l'espace inutilisé de l'image, ou à côté, mais l'idée est de mettre en mémoire cache toutes les puissances de deux résolutions d'une image. Utilisez la résolution d'un cran et interpolez les valeurs de pixel. Le pavage fait référence au stockage d'images non pas comme un tampon ou des lignes de balayage, mais plutôt comme des rectangles de lignes de balayage. Cela améliore la localité; l'échantillonnage à partir de 1000 sections scanline pour quelques pixels de 1000 pixels supprime votre cache.

Vous pouvez régler ce problème en rendant les versions à basse résolution si vous ne gérez pas la fréquence d'images souhaitée. Et il y a probablement d'autres façons plus fantaisistes d'obtenir des performances extrêmes. Je ne suis pas au courant d'un moyen trivial de le faire dans Qt.

0

En général, il y a beaucoup de solution pour le traitement fichiers volumineux vous pouvez lire le fichier dans un tampon et divisé à des graphiques rectangulaires, puis charger et de les voir, et même pour les gros fichiers, vous pouvez créer une vignette il y aurait plus d'image algorithme de traitement pour réduire la taille du fichier et conserver la qualité des images.

QGraphicsview et un ensemble de mosaïques d'images, la vue gère pour vous tous les coeurs de défilement et de monde.
Il vous suffit soit pré-découper les images en tuiles à l'avance ou tirer une section de données d'image à la volée

Voir this question pour savoir plus sur les textures dans la manipulation QOpenGLTexture pour les gros fichiers.