7Fermer9
BrunniLe 01/02/2006 à 13:57
Comme promis, voici une description de la méthode que j'ai utilisée:

A la base j'ai une routine, qui s'occupe de créer une palette optimisée (16 couleurs) pour un morceau d'image (tile). Elle me renvoie aussi un score pour cette image, qui est l'addition des défauts de l'image (différence entre deux couleurs: racine(rdiff^2+vdiff^2+bdiff^2) où rvbdiff est la différence entre le pixel utilisant la palette et la vraie couleur, et y'a sûrement mieux comme formule d'ailleurs, je serais intéressé).
La première étape consiste à générer des palettes. D'abord, je crée une première palette en prenant une tile "au hasard" (en réalité, celle qui a le plus de couleurs différentes) dans l'image et en la passant à la fonction de création de palette optimisée.
Ensuite, j'essaie de caser toutes les tiles du dessin dans cette palette. Celle qui passe le moins bien (plus mauvais score) reçoit une palette pour elle. Ensuite, j'essaie de caser toutes les tiles dans ces deux palettes, et celle qui rentre le moins bien reçoit elle-aussi une palette, etc.
Deuxième étape, donner la meilleure palette à chacune des tiles. Pour ça, très simple, pour chaque tile, j'essaie de la caser dans une des palette et je regarde dans laquelle elle passe le mieux (meilleur score) et je la lui assigne.

Le résultat est globalement moyen, et pour cause, voici un exemple:
Prenons une image utilisant des nuances de vert, avec un cercle utilisant des nuances de bleu (comme un lac dans un pré par exemple). En premier, une palette verte sera créée. On essayera ensuite d'y caser nos tiles, et forcément le bleu ne passera pas. Problème: la partie la plus éloignée (celle qui méritera le plus selon les stats de recevoir une palette pour elle) est forcément celle qui ne contient pas de vert, donc le centre du cercle (tous les pixels sont faux à ce moment là). Résultat on se retrouve avec une palette complètement bleue générée à partir de cette tile, et dans les bords du lac, il ne va pas savoir laquelle des deux palettes (verte ou bleue) choisir, car aucune des deux ne contient un mélange de bleu et de vert... le résultat est donc dans le style JPEG 0% cheeky

Voilà, si vous avez des suggestions pour améliorer tout ça, c'est avec plaisir wink