Supponendo di avere una struttura come questa:
typedef struct LabColor {
uint8_t L;
uint8_t a;
uint8_t b;
} LabColor;
e una serie di 4 di loro:
LabColor colors[4];
getMeSomeColors (colors);
e pesi:
float weights[4];
getMeSomeWeights (weights);
Una possibile blending il metodo sarebbe questo:
float LSum = 0.0;
float aSum = 0.0;
float bSum = 0.0;
float weightSum = 0.0;
for (int i = 0; i < 4; i++)
{
LSum += ((float)colors [ i ].L * weights [ i ]);
aSum += ((float)colors [ i ].a * weights [ i ]);
bSum += ((float)colors [ i ].b * weights [ i ]);
weightSum += weights[i];
}
LabColor result;
result.L = (uint8_t)(LSum/weightSum);
result.a = (uint8_t)((aSum/weightSum) + 127);
result.b = (uint8_t)((bSum/weightSum) + 127);
Questo presuppone che i pesi siano tutti compresi tra 0 e 1. In caso contrario, è necessario eseguire alcuni serraggi. Se i pesi sommano a 1, puoi saltare il passaggio di divisione.
C'è un numero infinito di altri modi per fondere i colori. Se questo non fa quello che vuoi, dovrai dare più specifiche su ciò che vuoi.
Cosa ti aspetti da questo mix? Puoi calcolare la media dei 4 colori, componente per componente, con ponderazione, e otterrai colori validi. Ma se saranno i colori che ci si aspetta o no è difficile dire senza ulteriori informazioni. Hai provato a moltiplicare ciascuno per il loro rispettivo peso, quindi sommandoli per componente e dividendo per 4? Se ciò non ti dà quello che ti aspetti, puoi essere più preciso su ciò che ti aspetti? Se pubblichi una foto, sarebbe d'aiuto. – user1118321
Hai appena inserito una serie di tag del linguaggio di programmazione sperando di attirare il maggior numero possibile di spettatori potenziali? – DavidO
@DavidO - Ho incluso i linguaggi di programmazione con cui lavoro da oltre 10 anni. –