Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++/CLI Discussion :

Gestion d'un buffer d'images


Sujet :

C++/CLI

  1. #1
    Membre averti
    Gestion d'un buffer d'images
    Bonjour,

    Je veux faire un buffer de 200 images.
    Quand on ajouter une image elle vient se mettre au début du buffer et on décale toutes les autres d'une position vers la fin. Et la dernière est effacée.

    Mais le problème est que la copie des images tout le long du buffer prend du temps.

    Existe il une structure STL pour éviter de faire les déplacements des images?
    Merci,
    Christophe

  2. #2
    Membre chevronné
    Bonjour.

    Ton approche est en effet très lente, puisque l'ajout d'une image n'a pas une complexité constante et implique énormément de copies et d'opérations en mémoire.

    Je vois deux conteneurs plus appropriés :
    La liste doublement chaînée (std::list), où l'ajout et la suppression d'éléments sont très simples, au détriment de l'accès à un élément qui est plus lent (il n'est plus direct).
    La queue (std::queue), qui peut être intéressante si tu n'as besoin d'accéder qu'à la première ou à la dernière image seulement.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un chat / clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  3. #3
    Expert confirmé
    Ton problème n'est pas lié au fait que tu manipules des images, simplement d'importantes quantités de données. Il se trouve qu'une image nécessite justement une grande quantité de données pour sa représentation.

    Je vais faire court : pourquoi ajoutes-tu les nouveaux éléments en début, plutôt qu'en fin de liste ?

  4. #4
    Expert éminent sénior
    Si tu veux faire une liste FIFO dont tu connais déjà la longueur maximale, pourquoi ne pas l'implémenter bêtement sous forme d'un buffer circulaire?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.