Bonjour.
J'ai cherché sur le net, mais rien trouvé. J'aimerais convertir une bitmap 24 bits (16.8 millions de couleurs) en un nombre quelconque de couleurs (256, 16 ou autres) mais non pas en utilisant les couleurs système Windows, mais une palette qui soit optimisée pour la bitmap en question (du genre la bitmap ne contient qu'un dégradé de bleu vers le noir de 256 étapes, on pourrait utiliser toutes les 256 couleurs dans la palette pour ce dégradé).
Que me conseilleriez-vous? Là je viens d'essayer de réduire la précision (diviser par quelque chose puis le remultiplier) et compter le nombre de couleurs que ça fait à chaque fois, et ce en utilisant un diviseur toujours plus grand plus jusqu'à ce que j'ai autant voire moins de couleurs que désiré dans ma palette. Le rendu est plutôt moche, sans compter que même codé en C, c'est hyper-lent.
Vous n'auriez pas une meilleure idée?
e de chaque élément de la palette) + (idem pour le vert) + (idem plus le bleu)Je viens d'essayer un autre algo. Là le rendu est nettement meilleur; je fais:valeur absolue (rouge de ce pixel - rougCa me donne un résultat qui est en fait la diffférence entre les deux couleurs. Alors je regarde d'abord combien de couleurs j'obtiens avec une tolérance de zéro. S'il y en a trop, on la met à 1, puis à 2, etc. jusqu'à ce que ça donne 256 couleurs ou moins.
Qu'en pensez-vous? Mais ça ne me permet pas de faire du dithering...
Pollux Le 14/03/2004 à 16:29Edité par Pollux le 14/03/2004 à 16:40 Oui, c'est pas mal, mais ça donne certainement largement trop de poids à des valeurs "transitoires", et qui plus est la norme ∞ n'est pas forcément idéale...
Ce que tu peux faire, c'est attribuer un poids à chaque couleur (par exemple, chaque pixel pourrait avoir un poids de 1/(1+variation_de_couleur_à_son_voisinage)), et puis essayer de minimiser la somme des w[ i ]*abs(c[ i ]_original - c[ i ]_256couleur) ... (en fait, ça serait probablement plus simple à calculer avec la norme euclidienne)
« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)
Et on peut avoir le fameux wingraph.h ? (juste pour voir ce que donnerait ma méthode)
« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)
Heu là c'est un peu dur... Bon je vais voir ce que je peux faire... (wingraph n'est pas terminée, je suis *en train* d'écrire la doc, etc.)
Je l'enlève déjà. Ca évite tout problème.
Alors tu t'en sors?
Note: La fonction de chargement de bitmap ne fonctionne que pour les bitmaps 24 bits. De plus, elles doivent être d'une taille horizontale multiple de 4.
Miles Le 20/03/2004 à 22:25 euh, pour passer en 256 couleurs, tu prends soit les 3 premiers soit les 2 premiers bits pour le bleu, non ?
Effectivement (il me semble) c'est 3 bits/rouge, 3 bits/vert et 2 bits/bleu.
Mais là on cherche une palette optimisée et éventuellement faire du tramage pour que ce soit plus joli...