Vorausgesetzt Sie haben eine Struktur wie dieses:
typedef struct LabColor {
uint8_t L;
uint8_t a;
uint8_t b;
} LabColor;
und eine Reihe von 4 von ihnen:
LabColor colors[4];
getMeSomeColors (colors);
und Gewichte:
float weights[4];
getMeSomeWeights (weights);
Eine mögliche Vermischung Methode wäre dies:
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);
Dies setzt voraus, dass die Gewichte zwischen 0 und 1 liegen. Wenn nicht, dann müssen Sie etwas klemmen. Wenn die Gewichte 1 ergeben, können Sie den Teilungsschritt überspringen.
Es gibt unendlich viele Möglichkeiten, die Farben zu mischen. Wenn dieser nicht das tut, was Sie wollen, müssen Sie genauer angeben, was Sie wollen.
Was erwarten Sie von dieser Mischung? Sie können die vier Farben zusammen mit der Gewichtung komponieren, und Sie erhalten gültige Farben. Aber ob sie die Farben sind, die Sie erwarten oder nicht, ist ohne weitere Informationen schwer zu sagen. Haben Sie versucht, die einzelnen Gewichte einfach zu multiplizieren, sie dann komponentenweise zu addieren und durch 4 zu dividieren? Wenn Sie das nicht bekommen, was Sie erwarten, können Sie genauer sagen, was Sie erwarten? Wenn Sie ein Bild posten, würde es helfen. – user1118321
Haben Sie gerade eine Menge Programmiersprachen-Tags eingefügt, in der Hoffnung, so viele potentielle Zuschauer wie möglich anzulocken? – DavidO
@DavidO - Ich habe die Programmiersprache, mit der ich seit über 10 Jahren arbeite, mit einbezogen. –