Bonjour,
Je cherche à afficher une image sur une sorte de console qui ne peut accueillir que 16 couleurs.
Je commence par re-grouper des pixel ensemble, pour faire une sorte de gros 'pixel' qui va correspondre a un 'pixel' console. Jusque là, tout va bien.
Ensuite j'essaie de prendre la couleur la plus ressemblante aux couleurs disponibles. J'ai donc trouvé le cours de Xavier Philippeau sur ce même site et prit sa formule de carron (http://xphilipp.developpez.com/artic...ation/regions/ )
Le problème, c'est que le résultat n'est pas très bon.
Je ne sais pas si cela vient de l'algorithme utilisé, ou une erreur de programmation.Je suis un peu perdu.
Je vous poste mon code que vous pourrez testé :
La formule de Carron
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 function distanceCarron(h0,l0,s0,h1,s1,l1,rate,offset){ var a_s0 = ( (Math.PI / 2) + Math.atan(rate*(s0-offset)) ) / Math.PI ; var a_s1 = ( (Math.PI / 2) + Math.atan(rate*(s1-offset)) ) / Math.PI ; var alpha = Math.sqrt(a_s0*a_s1); var delta_h = Math.min( Math.abs(h1-h0) , 1 - Math.abs(h1-h0) ); var delta_l = Math.abs( l1 - l0 ) ; var distance = (alpha * delta_h) + ( (1- alpha) * delta_l ) ; return Math.abs(distance); //return distance ; }
La recherche du pixel le plus proche :
Et le code complet où vous pourrez testé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 function getConsoleColor(r,g,b){ var rate = document.getElementById('Crate').value ; var offset = document.getElementById('Coffset').value ; var s_HLS = RGBtoHSL(r,g,b); var fid = -1 ; var distance_min = null ; for( var id in COLOR ){ var distance = distanceCarron(s_HLS[0],s_HLS[1],s_HLS[2], COLOR_HLS[id][0],COLOR_HLS[id][1],COLOR_HLS[id][2], rate,offset); //console.log(distance); if( distance < distance_min || distance_min == null ){ fid = id ; distance_min =distance ; } } return COLOR[fid]; //COLOR_HLS == COLOR (r,g,b) };
http://jsfiddle.net/ktqMY/
http://pastebin.com/daEaEiDS
Si vous avez des idées pour n'aiguiller, je suis preneur !
Merci d'avance à tous !
Bonne journée
Partager