定义
真彩色(True Color) 是一种色彩表示方式,它通常指的是能够表达和显示256种色彩级别的颜色组合。
真彩色通常表示为 24 位色彩深度,也称为“真彩色模式”。
24 位色
在真彩色中,颜色通过三种基础颜色组合来表达:红色(Red)、绿色(Green)和蓝色(Blue),统称为RGB模型。
其中,R、G、B各占 8 比特位的大小,故真彩色通常表示为 24-bit
由于二进制下一个 0 或 1 的存储需要的空间为 1 bit
于是我们不难得知,每个色彩深度的取值为(写成二进制) 00000000 ~ 11111111
即十进制下的 0 ~ 255
所以每个基础颜色的取值有 256 种可能(取值包括 0)
由这三种基础颜色一共能组成的色彩类型为:256 * 256 * 256 == 16,777,216 种
彩虹渐变色
彩虹色渐变是从 红 -> 橙 -> 黄 -> 绿 -> 蓝 -> 靛 -> 紫 -> 红
既然真彩色能表现如此多的颜色,那么其中自然也包括各种彩虹渐变色
具体体现在RGB数值的变化为:
1. 红色到黄色
红色分量保持 255,绿色分量逐渐从 0 变到 255,蓝色分量始终是 0。
r:255 g:0~255 b:0
2. 黄色到绿色
红色分量从 255 变到 0,绿色分量保持 255,蓝色分量始终是 0。
r:255~0 g:255 b:0
3. 绿色到青色
红色分量始终是 0,绿色分量保持 255,蓝色分量从 0 变到 255。
r:0 g:255 b:0~255
4. 青色到蓝色
红色分量始终是 0,绿色分量从 255 变到 0,蓝色分量保持 255。
r:0 g:255~0 b:255
5. 蓝色到紫色
红色分量从 0 变到 255,绿色分量始终是 0,蓝色分量保持 255。
r:0~255 g:0 b:255
6. 紫色到红色
红色分量保持 255,绿色分量始终是 0,蓝色分量从 255 变到 0。
r:255 g:0 b:255~0
实例
观察R、G、B值的变化:
遍历所有24bit真彩色
运行以下程序后,终端里会开始遍历显示一共 16,777,216 种颜色(前提是终端支持ANSI转义码)
至于 ANSI 转义码是什么,详见我即将发布的博客。
#include<stdio.h>
#include<Windows.h>
int main()
{
int r = 0, g = 0, b = 0;
printf("\n\n\n\n");
printf("\t\t r\t g\t b\n");
for (r = 0; r < 255; r++)
{
for (; g < 255 && r % 2 == 1; g++)
{
for (; b < 255 && g % 2 == 1; b++)
{
printf("\033[?25l\033[38;2;%d;%d;%dmBLZ\033[0m\033[?25l\t\033[48;2;%d;%d;%dm \033[0m\033[?25l\t%3d\t%3d\t%3d\n\033[1A", r, g, b, r, g, b, r, g, b);
//Sleep(1);
}
for (; b > 0 && g % 2 == 0; b--)
{
printf("\033[?25l\033[38;2;%d;%d;%dmBLZ\033[0m\033[?25l\t\033[48;2;%d;%d;%dm \033[0m\033[?25l\t%3d\t%3d\t%3d\n\033[1A", r, g, b, r, g, b, r, g, b);
//Sleep(1);
}
}
for (; g > 0 && r % 2 == 0; g--)
{
for (; b < 255 && g % 2 == 1; b++)
{
printf("\033[?25l\033[38;2;%d;%d;%dmBLZ\033[0m\033[?25l\t\033[48;2;%d;%d;%dm \033[0m\033[?25l\t%3d\t%3d\t%3d\n\033[1A", r, g, b, r, g, b, r, g, b);
//Sleep(1);
}
for (; b > 0 && g % 2 == 0; b--)
{
printf("\033[?25l\033[38;2;%d;%d;%dmBLZ\033[0m\033[?25l\t\033[48;2;%d;%d;%dm \033[0m\033[?25l\t%3d\t%3d\t%3d\n\033[1A", r, g, b, r, g, b, r, g, b);
//Sleep(1);
}
}
}
return 0;
}
由于完全遍历的时间太长,这里只放出遍历部分颜色的演示效果
终端最大遍历速度:
总结
真彩色,实际上就是一种颜色的表示方法,R、G、B分别是它的三个参数,这些理解起来也没那么难,对吧?
后续不累子也将发表一篇使用 C 语言实现打印彩虹渐变色有关的博客
那么既然你都看到了这,点个赞收藏再关注一下也没那么难......对吧?
qwq