web-dev-qa-db-fra.com

bibliothèque d'images C ++ légère

J'ai cherché une bibliothèque d'images simple et petite mais robuste et rapide (pas complète!) Pour C++ (C suffirait si aucune version C++ n'est disponible).

Les principales fonctionnalités que je recherche sont:

  • Gratuit (opensource est un plus)
  • Construit pour la vitesse
  • Pas de gros ballonnement fonctionnel (comme ImageMagik, qui est vraiment complet mais qui est un mammouth)
  • Petite empreinte mémoire
  • Ne prend en charge que le minimum absolu de fonctions comme charger/enregistrer, redimensionner, convertir entre les formats. Rien d'extraordinaire
  • Récupération d'erreur pour les fichiers "cassés" (contrairement à stb_image.c, qui a une récupération d'erreur assez médiocre)
  • MSVC et gcc amical (j'ai utilisé CxImage pendant un certain nombre d'années mais avec la dernière version, j'ai des problèmes avec MSVC 2010 et il semblerait que le développement actif et le support de celui-ci se soient éteints maintenant, donc je suis sur le point de le laisser tomber)
  • Devrait prendre en charge les formats modernes populaires, comme JPEG2000, soit directement soit via une utilisation de bibliothèques générales comme libpng
  • Peu m'importe si c'est DirectX ou OpenGL car je ne prévois pas de l'utiliser pour afficher les images - seulement pour les traiter par fichier pour un site web
  • La prise en charge des liens statiques et dynamiques est un plus
  • Le support du filetage est un énorme plus

Bibliothèques que j'ai consultées et rejetées pour une raison ou une autre:

  • CxImage (plus de développement actif dessus)
  • ImageMagik - trop énorme (et lent)
  • stb_image.c - mauvaise gestion des erreurs, ne prend pas en charge suffisamment de formats d'image
  • DevIL (n'a pas encore rejeté, mais ne l'a pas beaucoup examiné non plus - je viens de l'apprendre il y a quelques minutes sur un article similaire sur SO) - en fonction de sa taille et de ses fonctionnalités, il semble très prometteur pour ce dont j'ai besoin
  • FreeImage (identique à DevIL - y jettera un coup d'oeil sous peu mais il est un peu gros à mon goût)
  • SOL (identique à stb_image.c)
  • TimThumb - c'est un PHP, pas un C/C++

En bref, je veux juste quelque chose d'aussi petit que possible et aussi rapide que possible au détriment du simple strict minimum de fonctionnalités, mais je n'ai pas encore trouvé de candidat approprié.

Des suggestions de cette communauté, s'il vous plaît? Mais gardez à l'esprit les contraintes que j'ai énumérées ci-dessus - je ne pense pas que ce soit OK de jeter une réponse d'un formulaire "avez-vous essayé X?" où "X" ne répond pas à la moitié de mes besoins :)

Edit: En regardant un peu plus dans DevIL, il semblerait que ce soit ce dont j'ai besoin. C'est léger, minuscule, robuste. Maintenant, je dois juste m'assurer qu'il fonctionne. Oh, et CImage (j'ai oublié de le mentionner dans la liste) - n'a pas aimé ses performances (même si je dois admettre que l'idée de la mise en œuvre uniquement de modèle est mignonne, pour le moins)

29
YePhIcK

Je vous suggère fortement d'écrire une petite bibliothèque autour de libpng et jpeglib (et toutes les autres bibliothèques de bas niveau pour les formats que vous devez prendre en charge). Ce n'est pas si difficile et vous pouvez coder toutes les fonctionnalités dont vous avez besoin.

Comme alternative, vous pouvez utiliser certains des bons wrappers c ++ qui existent déjà pour ces bibliothèques. Voici quelques exemples:

11
Gigi

Regardez CImg bibliothèque, c'est juste un seul fichier d'en-tête

10
qehgt