qt随机生成差异大的颜色,并且避开红色

50 篇文章 3 订阅

https://blog.csdn.net/ColdWindHA/article/details/82080176
采用hsv色彩模型
在HSV模型中,用度数来描述色相,其中红色对应0度,绿色对应120度,蓝色对应240度。
在这里插入图片描述
通过PS软件查看H值和颜色的对应关系可知:
h落在 [0,15] 和 [295,360]是红色系
所以避开红色的h的取值范围在[15,295]

要生成差异大的颜色就意味着h的间隔要大。假设我们一共要取 sum种颜色。
那么相邻颜色对应 h 的差值最大为: 280 / sum (其中 h的取值范围是[15,295])
所以随机采样的方案是:

  1. 把颜色分成sum个区间
  2. 在第一个区间随机取值 int Length = 280 / sum; 第一个颜色的取值范围是: [15, Length+15]
  3. 第i个颜色 h的值为 h i = h i − 1 + L e n g t h h_i = h_{i-1} +Length hi=hi1+Length
  4. 随机生成s v的值

在qt中s和v的取值范围是[0,255], 其中
s饱和度 数越大越饱和。可以理解为假设h指向绿色,那么s越大颜色越绿。在我的场景下,我需要颜色区分度大一些,鲜艳一些。这里我选择在 s ∈ [ 55 , 255 ] s \in [55,255] s[55,255],即
int s = rand() % 200+55;
v代表亮度,v=0是黑色 越大越亮。我期望得到更多亮一些的颜色所以选择 v ∈ [ 100 , 255 ] v \in [100,255] v[100,255]
int v = rand() % 155+100;//v=0是黑色 越大越亮

s和v是在当前场景下,多次实验得到的。你可以根据你的场景选择不同的数值

	//当两个颜色h值相差很大时,颜色看起来差别大
	QList<QColor> ColorList;
	int Length = 280 / sum;
	//所以第一个颜色的取值范围是: [15, Length+15]
	int h = rand()% Length +10;

	for (int i = 0; i < sum; i++)
	{
		// s,v 的取值范围都是 [0,255]
		int s = rand() % 200+55; //s饱和度 数越大越饱和
		int v = rand() % 155+100;//v=0是黑色 越大越亮
		QColor randColor = QColor::fromHsv(h, s, v);
		h = h + Length;
		ColorList << randColor;
	}

List of 20 Simple, Distinct Colors

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值