RGB特定控制台文本颜色C ++

我试图将win32控制台应用程序的字体颜色分别设置为特定的RGB值,如50,75,90。 我已经尝试了SetConsoleTextAttribute() ,但不幸的是,对于R,G或B,似乎限制为0或255。

这一定是可能的,因为在命令提示属性窗口中,你可以设置特定的颜色,就像这样

http://www.yourgamercard.net/screen/i/4a8c57.png

我search了不less,但似乎唯一的答案是SetConsoleTextAttribute()

您需要使用SetConsoleScreenBufferInfoEx来设置它,请参阅CONSOLE_SCREEN_BUFFER_INFOEX结构的ColorTable条目。

控制台的颜色是一个两级的过程:控制台的属性,前景和背景(红色,绿色,蓝色和强度)有四个位,这似乎将颜色限制为基本的主色和次色。 但是这些值被用作颜色表的索引,以确定实际的显示值。 所以将字符属性“颜色”位认为是“逻辑红色”而不是物理红色。 (字符属性'红'映射到的值实际上是默认的红色,但不一定是)。所以你总是限制在16个索引颜色; 但是你可以通过ColorTable将它们设置为你想要的16种全RGB颜色。

在上面的对话框中看到的彩色正方形条基本上就是该颜色表,并且按照字符属性顺序列出了颜色,第一个正方形是“逻辑黑色”,依此类推。

有一种方法可以使文本完全RGB,但是如果您创建文本的副本,则需要“ SetPixel ”,然后才能更改RGB值,这是我为A编写的内容,很难做到,但我正在制作一个.h文件,以便每个人都可以使用它,在这里你去:

 void PrintA(int R, int G, int B) { HWND myconsole = GetConsoleWindow(); HDC mydc = GetDC(myconsole); SetPixel(mydc, i + 0, i2 + 3, RGB(R, G, B)); SetPixel(mydc, i + 0, i2 + 4, RGB(R, G, B)); SetPixel(mydc, i + 0, i2 + 5, RGB(R, G, B)); SetPixel(mydc, i + 0, i2 + 6, RGB(R, G, B)); SetPixel(mydc, i + 0, i2 + 7, RGB(R, G, B)); SetPixel(mydc, i + 0, i2 + 8, RGB(R, G, B)); SetPixel(mydc, i + 0, i2 + 9, RGB(R, G, B)); SetPixel(mydc, i + 1, i2 + 2, RGB(R, G, B)); SetPixel(mydc, i + 1, i2 + 3, RGB(R, G, B)); SetPixel(mydc, i + 1, i2 + 4, RGB(R, G, B)); SetPixel(mydc, i + 1, i2 + 5, RGB(R, G, B)); SetPixel(mydc, i + 1, i2 + 6, RGB(R, G, B)); SetPixel(mydc, i + 1, i2 + 7, RGB(R, G, B)); SetPixel(mydc, i + 1, i2 + 8, RGB(R, G, B)); SetPixel(mydc, i + 1, i2 + 9, RGB(R, G, B)); SetPixel(mydc, i + 2, i2 + 1, RGB(R, G, B)); SetPixel(mydc, i + 2, i2 + 2, RGB(R, G, B)); SetPixel(mydc, i + 2, i2 + 6, RGB(R, G, B)); SetPixel(mydc, i + 3, i2 + 1, RGB(R, G, B)); SetPixel(mydc, i + 3, i2 + 2, RGB(R, G, B)); SetPixel(mydc, i + 3, i2 + 6, RGB(R, G, B)); SetPixel(mydc, i + 4, i2 + 2, RGB(R, G, B)); SetPixel(mydc, i + 4, i2 + 3, RGB(R, G, B)); SetPixel(mydc, i + 4, i2 + 4, RGB(R, G, B)); SetPixel(mydc, i + 4, i2 + 5, RGB(R, G, B)); SetPixel(mydc, i + 4, i2 + 6, RGB(R, G, B)); SetPixel(mydc, i + 4, i2 + 7, RGB(R, G, B)); SetPixel(mydc, i + 4, i2 + 8, RGB(R, G, B)); SetPixel(mydc, i + 4, i2 + 9, RGB(R, G, B)); SetPixel(mydc, i + 5, i2 + 3, RGB(R, G, B)); SetPixel(mydc, i + 5, i2 + 4, RGB(R, G, B)); SetPixel(mydc, i + 5, i2 + 5, RGB(R, G, B)); SetPixel(mydc, i + 5, i2 + 6, RGB(R, G, B)); SetPixel(mydc, i + 5, i2 + 7, RGB(R, G, B)); SetPixel(mydc, i + 5, i2 + 8, RGB(R, G, B)); SetPixel(mydc, i + 5, i2 + 9, RGB(R, G, B)); i += 8; if (i / 80 == 8) { i = 0; i2 += 12; } }