Qt 平均QRgb值
对于后处理算法,我需要平均我的Qt 平均QRgb值,qt,colors,average,Qt,Colors,Average,对于后处理算法,我需要平均我的std::vector中存在的颜色值(QRgb) 你建议怎么做?分别对3个分量求和,然后求平均值?否则?由于它只是ARGB格式的32位无符号int,因此不足以添加颜色,这很可能导致溢出。但也不够,因为它对颜色分量使用定点16位整数,因此也无法处理超出有效[0,1]范围的颜色。因此不能使用QRgb或QColor进行此操作,因为它们将每个部分和钳制到有效范围。由于精度有限,在添加颜色之前也无法预分解颜色 所以你最好的办法就是用浮点数将各个分量相加,然后除以向量大小: s
std::vector
中存在的颜色值(QRgb
)
你建议怎么做?分别对3个分量求和,然后求平均值?否则?由于它只是ARGB格式的32位无符号int,因此不足以添加颜色,这很可能导致溢出。但也不够,因为它对颜色分量使用定点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();
std::向量rgbValue;
浮球r=0.0f,g=0.0f,b=0.0f,a=0.0f;
对于(std::vector::const_迭代器iter=rgbValues.begin();
iter!=rgbValues.end();++iter)
{
QColor颜色(*iter);
r+=color.redF();
g+=color.greenF();
b+=color.blueF();
a+=颜色。alphaF();
}
浮动比例=1.0f/浮动(rgbValues.size());
QRgb=QColor::fromRgbF(r*刻度,g*刻度,b*刻度,a*刻度).rgba();
我就是这么做的。当我使用[0-255]值时,我使用long-long来存储des和