Comment utiliser kCGImagePropertyGIFImageColorMap ou créer une table de couleurs?

J’essaie de bricoler avec quelques propriétés GIF telles que kCGImagePropertyGIFImageColorMap et kCGImagePropertyGIFHasGlobalColorMap ( reference ) dans Core Graphics.

Je crée des GIF animés et j’aimerais voir si je peux améliorer la qualité en jouant avec la quantité de couleurs. Je n’ai trouvé qu’un autre exemple de code et je ne suis pas sûr que cela fonctionne.

J’ai essayé d’utiliser quelques exemples de codes liés ci-dessus, mais cela ne semble pas fonctionner. La configuration de kCGImagePropertyGIFHasGlobalColorMap semble pas non plus faire quoi que ce soit. Merci

Core Graphics ne permet pas de définir une table de couleurs globale, mais uniquement une table de couleurs locale pour un fichier GIF à image unique. Les fichiers gif multi-image requièrent que les propriétés individuelles de chaque image soient définies, ce qui signifie que kCGImagePropertyGIFImageColorMap n’aura aucun effet lorsque les images sources ne sont pas elles-mêmes des fichiers GIF et que le code dans la liste liée est incorrect. Au lieu d’essayer de définir une palette de couleurs globale, définissez les propriétés de chacune des images que vous essayez de créer en chaîne, ce qui peut être manipulé avec Core Graphics en utilisant un contexte d’image ou en définissant les propriétés de l’image lorsque vous les ajoutez. à la destination de l’image ref.

Si vous vous posez encore des questions sur les tables de couleurs GIF, elles sont mieux expliquées que jamais par la bibliothèque giflib , ce qui serait probablement une meilleure solution que Core Graphics pour générer un gif et manipuler sa table de couleurs. Si vous utilisez l’itinéraire Core Graphics et que vous voulez toujours savoir comment instancier une table de couleurs, le format général est le suivant:

 // Color tables are arrays of 8-bit bytes from 0 (deepest black) to 255 (brightest white) // with each color's intensity grouped in 3's for a total of 9 values. // The format is interpreted as hex values. const uint8_t colorTable[9] = { 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF }; // { White Bytes }, { Red Bytes }, { Blue Bytes }