Поскольку QRgb
- это просто 32-разрядное целое число без знака в формате ARGB, его недостаточно для добавления цветов, что, скорее всего, приведет к переполнению.Но также QColor
недостаточно, поскольку в нем используются 16-разрядные целые числа с фиксированной запятой для цветовых компонентов, и поэтому они также не могут справляться с цветами вне допустимого диапазона [0,1].Таким образом, вы не можете использовать QRgb
или QColor
для этого, поскольку они ограничивают каждую частичную сумму допустимым диапазоном.Вы также не можете разделить цвета перед их добавлением из-за их ограниченной точности.
Таким образом, лучше всего было бы просто сложить отдельные компоненты с использованием чисел с плавающей запятой, а затем разделить их на размер вектора:
std::vector<QRgb> rgbValues;
float r = 0.0f, g = 0.0f, b = 0.0f, a = 0.0f;
for(std::vector<QRgb>::const_iterator iter=rgbValues.begin();
iter!=rgbValues.end(); ++iter)
{
QColor color(*iter);
r += color.redF();
g += color.greenF();
b += color.blueF();
a += color.alphaF();
}
float scale = 1.0f / float(rgbValues.size());
QRgb = QColor::fromRgbF(r*scale, g*scale, b*scale, a*scale).rgba();