gpt4 book ai didi

c++ - 从渐变中获取中间色

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:09 26 4
gpt4 key购买 nike

假设我有一个线性渐变,如图所示:

QLinearGradient linearGrad(QPointF(0, 0), QPointF(0, 100));
linearGrad.setColorAt(1, Qt::red);
linearGrad.setColorAt(0.5, Qt::yellow);
linearGrad.setColorAt(0, Qt::green);

如何获取这个渐变中点QPointF(0, 28.5)的颜色?

确实我想要这种颜色分布能够选择中间色。我不在乎它是通过使用 QLinearGradient 还是其他东西完成的。

最佳答案

我将渐变的颜色存储在一个 QList 中,然后使用颜色插值进行计算。

QColor ColorGradient::getColor(double value)
{
qDebug()<< "ColorGradient::getColor:";
//Asume mGradientColors.count()>1 and value=[0,1]
double stepbase = 1.0/(mGradientColors.count()-1);
int interval=mGradientColors.count()-1; //to fix 1<=0.99999999;

for (int i=1; i<mGradientColors.count();i++)//remove begin and end
{
if(value<=i*stepbase ){interval=i;break;}
}
double percentage = (value-stepbase*(interval-1))/stepbase;
QColor color(interpolate(mGradientColors[interval],mGradientColors[interval-1],percentage));
return color;
}
QColor ColorGradient::interpolate(QColor start,QColor end,double ratio)
{
int r = (int)(ratio*start.red() + (1-ratio)*end.red());
int g = (int)(ratio*start.green() + (1-ratio)*end.green());
int b = (int)(ratio*start.blue() + (1-ratio)*end.blue());
return QColor::fromRgb(r,g,b);
}

关于c++ - 从渐变中获取中间色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3306786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com