Il y a quelques temps, sur une idée de Dobro (merci à lui


En gros, l'algo que j'utilise ressemble à ça :
Code : Tout sélectionner
If StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
; on stocke dans un tableau les pixels
For i = 0 To w-1
For j = 0 To h-1
color = Point(i,j)
a = Alpha(color)
r = (Red(color)/n1)*n1
g = (Green(color)/n1)*n1
b = (Blue(color)/n1)*n1
OriginalImageBase(i,j) = RGBA(r,g,b,a)
Next
Next
StopDrawing()
EndIf
Le problème c'est que ça ne fonctionne bien qu'avec + de 16 couleurs.
Si je réduis trop, je n'ai plus du tout les bonnes couleurs.
Avec le paramètre 16 "couleurs" :

avec le paramètre 2 couleurs :

Punaise, on voit que ça merdouille

Bon, c'est normal, l'algo arrondit les couleurs.
Voici donc ce que j'aimerai faire :
- créer une sorte de palette avec les couleurs les plus utilisées (couleurs indexées) et ensuite, c'est sur cette palette que je réduis les couleurs.
Savez-vous comment on peut connaître les couleurs les plus utilisées d'une image ?
J'ai essayé ça, mais c'est épouvantable de lenteur ^^
Code : Tout sélectionner
If StartDrawing(ImageOutput(0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
; on stocke dans un tableau les pixels
For i = 0 To w-1
For j = 0 To h-1
color = Point(i,j)
a = Alpha(color)
If a > 0
; on va stocker la couleur du pixel
ok = 0
; on vérifie si on a déjà cette couleur
For k =0 To ArraySize(ZeColor())
If ZeColor(k)\color = color
ZeColor(k)\nb +1
ok = 1
Break
EndIf
Next
If ok = 0
; on ajoute une Case de couleur ds notre tableau
k = ArraySize(ZeColor())+1
ReDim ZeColor.sColor(k)
ZeColor(k)\color = color
ZeColor(k)\nb = 1
EndIf
EndIf
Next
Next
StopDrawing()
EndIf
merci
