Giả sử bạn có một cấu trúc như thế này:
typedef struct LabColor {
uint8_t L;
uint8_t a;
uint8_t b;
} LabColor;
và một mảng của 4 trong số họ:
LabColor colors[4];
getMeSomeColors (colors);
và trọng lượng:
float weights[4];
getMeSomeWeights (weights);
Một pha trộn có thể phương pháp này sẽ là:
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);
Giả thiết trọng số này là từ 0 đến 1. Nếu không, bạn sẽ phải thực hiện một số thao tác kẹp. Nếu trọng số tổng là 1, thì bạn có thể bỏ qua bước phân chia.
Có vô số cách khác để pha trộn màu sắc. Nếu điều này không làm những gì bạn muốn, bạn sẽ cần phải cung cấp thêm chi tiết cụ thể như những gì bạn muốn.
Bạn mong đợi sự pha trộn này để sản xuất ra sao? Bạn có thể trung bình 4 màu với nhau theo từng thành phần, với trọng số và bạn sẽ nhận được các màu hợp lệ. Nhưng cho dù họ sẽ là những màu sắc bạn mong đợi hay không là khó để nói mà không có thêm thông tin. Bạn đã thử nhân lên từng cái theo trọng số tương ứng của họ rồi thêm chúng lại với nhau thành phần khôn ngoan và chia cho 4? Nếu điều đó không cung cấp cho bạn những gì bạn mong đợi, bạn có thể chính xác hơn về những gì bạn mong đợi không? Nếu bạn đăng ảnh, nó sẽ giúp ích. – user1118321
Bạn vừa bao gồm một loạt các thẻ ngôn ngữ lập trình có hy vọng thu hút nhiều người xem tiềm năng nhất có thể không? – DavidO
@DavidO - Tôi đã bao gồm những ngôn ngữ lập trình mà tôi làm việc trong hơn 10 năm. –