Por lo pronto creo que he conseguido la gama de colores 8 bits, conformando así una paleta de 256 colores por combinación de la tabla de colores "básicos" para el fondo y los caracteres dada por la aplicación de la siguiente tabla/regla:
Citar
PARA LA CONSOLA: system ("color numero(fondo)letra(letras)")
Otra forma es coger una combinación de fondo y letra:
n=16*fondo+letra
Color fondo de consola :
0 = Negro
1 = Azul
2 = Verde
3 = Aguamarina
4 = Rojo
5 = Purpura
6 = Amarillo
7 = Blanco
8 = Gris
9 = Azul claro
Color de texto:
A=10 = Verde claro
B=11 = Aguamarina claro
C=12 = Rojo claro
D=13 = Purpura claro
E=14 = Amarillo claro
F=15 = Blanco brillante
y aplicar el resultado "n" a:
SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), n );
Otra forma es coger una combinación de fondo y letra:
n=16*fondo+letra
Color fondo de consola :
0 = Negro
1 = Azul
2 = Verde
3 = Aguamarina
4 = Rojo
5 = Purpura
6 = Amarillo
7 = Blanco
8 = Gris
9 = Azul claro
Color de texto:
A=10 = Verde claro
B=11 = Aguamarina claro
C=12 = Rojo claro
D=13 = Purpura claro
E=14 = Amarillo claro
F=15 = Blanco brillante
y aplicar el resultado "n" a:
SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), n );
Si nos fijamos bien hay 255 (16x16-1, porque empieza contando desde cero) combinaciones que se corresponden a lo indicado al principio.
Y éste es el resultado de esas combinaciones:
No salen los 256 porque no cabían en la pantalla. Y el código con el cual he generado la tabla anterior:
Código
#include <stdio.h> #include <stdlib.h> #include <windows.h> int color (int n); int main() { int n=0,matriz[10][30]={0}, i, j; for(i=0;i<9;i++) { for(j=0;j<30 && n<256 ;j++,n++) { if (j%10==0 ) printf ("\n"); matriz[i][j]=n; color (n); printf(" %d ", matriz[i][j]); color (7); printf("\t"); } } system("pause"); return 0; } int color (int n) { SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), n ); }
Pero, siempre tiene que haber un pero, queda lejos del sistema RGB (Red Green Blue)que usa una paleta de 256 por color que da como resultado: 256 x 256 x 256 = 16.777.216 colores distintos, o sea 24 bits Vamos, la opción casi por defecto de colores en los monitores actuales.
Este valor se representa en hexadecimal, con lo que el rango va de 00 a FF por cada uno de ellos. El código se expresa así: #RRGGBB siendo cada uno de los valores de 2 cifras el rango de cada uno de los 3 colores, con lo que obtenemos el valor final que representa a cada color....
Dicho esto, podemos ver algunos ejemplos:
- Negro: representa la ausencia de color, por tanto su valor será: #000000
- Blanco: es la mezcla de todos los colores: #FFFFFF
- Rojo: todo el tono es del rojo, siendo los otros 2 nulos: #FF0000
- Verde: sólo aparece el verde, sin tener valor los otros 2: #00FF00
- Azul: idéntico razonamiento, pero sólo con el azul: #0000FF
Esto da como resultado un estándar, el UNIX11 dándose la coincidencia de color de los nombres usados en Windows Presentation Foundation (WPF) ,la versión 1,0 de Microsoft .NET Framework , nombres de formularios Windows Forms, y de Microsoft Internet Explorer color.
Muestro en la siguiente tabla los principales nombres de colores X11:
Y aquí surge mi duda/pregunta, ¿alguien puede orientarme, en el sentido de cómo acceder a toda esa gama de colores desde "código"?. Sí, ya sé que hay que buscar en las API pero es todo un mundo que estoy lejos de manejar con cierta soltura, de ahí mi petición de orientación "pero" a algo concretito, nada de páginas que yo mismo puedo encontrar googleando.
Espero les haya gustado mi modesta paleta de colores de 8 bits, quedo a la espera de poder usar la de 24 bits.
Saluditos! .... ...
P.D:Gracias a mr.blood por la defensa que hizo en otro foro de "mi/su" código del tema de matrices de 10x10, ya que el "cara" del usuario hxcbps, que no había aportado nada digno de mención, colgo el código como suyo con la esperanza de que otros le "terminaran" la tarea
Y conste que no es que me importe compartir y ayudar dentro de mis modestísimas posibilidades/conocimientos del C/C++, que no, pero una cosa es ayudar y otra colgarse medallitas ajenas. Un mínimo de cortesía/honestidad. Y si expreso esto es porque cuando entró en este foro ya venía "rebotado" de otro foro, más concretamente del Rincón del C. Nuevamente, gracias mr.blood.