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

Algorithmes et structures de données Discussion :

Algorithme de décompression GIF (16 couleurs)


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Algorithme de décompression GIF (16 couleurs)
    Bonjour,

    J’espère poster au bon endroit. Si ça n'est pas le cas, mes excuses par avance au gentil administrateur qui déplacera mon topic.

    Dans le but de créer une fonction d'affichage d'un gif animé sur une écran tft 80X160 ST7735S piloté par un micro-contrôleur ARM M3 (MBED LPC1768), je cherche à bien comprendre la méthode de décompression LZW des gif.

    J'ai suivi quelques tutoriels sur la décompression, et notamment ceux-ci :

    http://dictionnaire.sensagent.lepari...0Format/en-en/

    http://giflib.sourceforge.net/whatsi...mage_data.html

    Je pensais avoir compris la méthode (notamment pour des palettes a 256 couleurs), mais quand je passe à une palette de 16 couleurs (gif créé via photoshop), je ne peux décompresser correctement que les trois premières lignes de mon gif de test.
    Avant que l'on ne me pose la question, je souhaite garder une palette à 16 couleurs pour des questions futures de taille de palette dynamique lors de la programmation sur mon micro-contrôleur.
    La problématique c'est que pour le coup, je ne suis pas certain d'avoir compris la subtilité du décodage pour une palette à 256 couleurs.

    J'en viens donc à mon problème :

    Je décode le gif suivant

    Je vous joints un fichier excel :
    - la première feuille décrit la récupération du "stream code". Je découpe les octets constituant l'image en groupe de 5 bit (normal j'ai 0xF couleurs, soit une découpe de 5 bit des octets).
    - la seconde est la partie décodage proprement dite

    Si quelqu'un expert dans ce domaine pouvait m'expliquer ou est mon erreur...

    Merci d'avance

  2. #2
    Futur Membre du Club
    Bon, je vais me répondre à moi même :

    En fait il faut prendre en compte le fait que le stream code n'a pas une taille fixe. il augmente de 1 bit quand la valeur du nouveau index ajouté vaut 2^(taile en bit du code en cours)-1...

    Si ça intéresse qq'un je peux développer.

    Bonne journée a tous

  3. #3
    Membre expert
    Salut si cela peux t'intéresser toi ou quelqu'un d'autre voici mon composant TGifViewer pour Lazarus pour une prise en charge complète du format GIF

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP