Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: leosansan en 29 Mayo 2013, 15:25 pm



Título: Gama de colores.
Publicado por: leosansan en 29 Mayo 2013, 15:25 pm
Casi sin querer me he visto envuelto en una vorágine de color, todo por querer mejorar la presentación tan "sosa" de la consolita del C/C++.

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 );


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:


(http://i1280.photobucket.com/albums/a497/leosansan/GRAFICOS1/gamacolores_zps22b26a09.jpg)

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
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4.  
  5. int color (int n);
  6.  
  7. int main()
  8. {
  9.    int n=0,matriz[10][30]={0}, i, j;
  10.    for(i=0;i<9;i++)
  11. {
  12.        for(j=0;j<30 && n<256 ;j++,n++)
  13.        {
  14.           if (j%10==0  )
  15.                printf ("\n");
  16.            matriz[i][j]=n;
  17.            color (n);
  18.            printf("  %d  ", matriz[i][j]);
  19.            color (7);
  20.            printf("\t");
  21.        }
  22. }
  23.    system("pause");
  24.    return 0;
  25. }
  26.  
  27. int color (int n)
  28. {
  29.        SetConsoleTextAttribute(GetStdHandle (STD_OUTPUT_HANDLE), n );
  30. }
  31.  

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:


(http://i1280.photobucket.com/albums/a497/leosansan/GRAFICOS1/IC24340_zps5053ec0b.jpg)

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! .... ...

(http://i1280.photobucket.com/albums/a497/leosansan/leosan1/leones%20peques/lion14peque_zps1d213b80.jpg)

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,  (http://foro.elhacker.net/programacion_cc/simulacion_con_matriz_bidimensional_de_10x10-t390785.0.html)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.


Título: Re: Gama de colores.
Publicado por: aguml en 10 Junio 2013, 00:50 am
que yo sepa la consola no admite rgb, va a 8 bits que ya es bastante. Para trabajar con rgb tienes que usar poo y ahi si que puedes usar rgb.


Título: Re: Gama de colores.
Publicado por: 85 en 10 Junio 2013, 03:03 am
esto me hizo acordar a un plug que había hecho para usarlo en un juego de opengl

http://foro.elhacker.net/programacion_cc/gltest2_formato_rgba_para_manejar_colores-t385852.0.html


muy bueno salu2


Título: Re: Gama de colores.
Publicado por: leosansan en 10 Junio 2013, 04:21 am
esto me hizo acordar a un plug que había hecho para usarlo en un juego de opengl

http://foro.elhacker.net/programacion_cc/gltest2_formato_rgba_para_manejar_colores-t385852.0.html


Gracias 85 por el enlace y el código, muy interesante en estos momentos que me debato entre OpenGL, SDl, Qt y Allegro aunque de este último estoy a la espera de ver cómo diablos se instala la versión 5, ya que empezar con una librería, la cuatro, ya superada por una nueva me da no sé qué.

En cualquier caso seguiré practicando con las posibilidades de color de la consola, al fin y al cabo 8 bits no está tan mal, especialmente para alguien que se inicioen este mundillo con tan solo dos colores: texto verde sobre fondo negro. ;)

Saluditos! .... ..
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)

REEDITO: SMFL.