Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 平均QRgb值_Qt_Colors_Average - Fatal编程技术网

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和