Question

Been farfouillé Google et n'ont pas trouvé tout comme ce que je suis après. Alors qu'est-ce que je suis après? bien deux choses:

  • d'une part, je suis à la recherche d'un algorithme / pseudo-code / blanc-papiers pour déterminer une couleur la mieux adaptée pour une donner r, g, b tuple de réseau de et 256 tuples RVB.

  • En second lieu, je suis à la recherche d'un algorithme / pseudo-code / blanc-papiers à recolorer une image de la palette 8 bits (en utilisant la palette RGB ci-dessus) soit à un étant donné teinte / saturation ou par r, g, b modification canal. aussi serait bien s'il était possible d'ajouter une solution pour les pixels gamma et en artifacting la colorisation ainsi.

Quiconque a des astuces / conseils / pointeurs à où je pourrais trouver une telle chose (je sais qu'ils doivent exister, sinon quelques-unes des fonctions de Photoshops ne serait pas)

MISE À JOUR: voici un RGB à distance euclidienne de base à la recherche de l'index de la palette:

uint_8 __stdcall GFXUTIL_GetNearestPaletteIndex(const uint_8* pPalette, size_t nSize, uint_8 nRed, uint_8 nGreen, uint_8 nBlue)
{
    if(pPalette == NULL)
        return 0;

    int nDistance = -1;
    size_t nIndex = 0, nFoundIndex = 0;
    while(nIndex < nSize)
    {
        int nDistRed = pPalette[0] - nRed;
        int nDistGreen = pPalette[1] - nGreen;
        int nDistBlue = pPalette[2] - nBlue;
        int nCurrentDistance = (nDistRed * nDistRed) + (nDistGreen * nDistGreen) + (nDistBlue * nDistBlue);
        if(nCurrentDistance < nDistance)
        {
            nFoundIndex = nIndex;
            nDistance = nCurrentDistance;
        }

        nIndex++;
        pPalette += sizeof(uint_32);
    }

    return nFoundIndex;
} 
Était-ce utile?

La solution

Voir http://en.wikipedia.org/wiki/Color_difference pour savoir comment calculer distances entre les couleurs afin que la sensibilité des yeux humains est pris en compte.

Autres conseils

Si vous voulez plus vite que la recherche linéaire, puis consultez VP-tree ou KD-arbre.

Si vous voulez perceptif précis, puis faire la recherche dans espace couleur Lab .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top