|
|
|
Ahora veremos como
funciona la paleta de colores, para poder cambiar nosotros mismos los colores
y así poder personalizarnos un programa, o por ejemplo cuando cargamos
una imagen, que también es necesario poner la paleta de esa imagen.
Vamos empezar viendo como funciona lo de la paleta de colores, que control un chip llamado DAC (Digital Analog Converter), para así conseguir hacer efectos de paleta, pero estos lo encontraras en la sección de efectos (hacer link). Como ya sabemos en el modo 13h disponemos de una paleta de 8 bits, o sea, 256 colores. Cada color se consigue a basa de mezclar tres componentes para ir consiguiendo así diferentes tonalidades. Así tenemos que un color está formado por tres colores básicos, el rojo, verde y azul. Estos tres colores pueden tener un máximo de 64 tonalidades, desde el 0 (más oscuro) hasta el 63 (más claro). Esto es así porque el sistema que se utiliza es el denominado RGB (Red, Green, Blue), que es el que el monitor utiliza para representar el color de un pixel, ya que este posee tres haces de luz, una haz rojo, otro verde y uno azul, los cuales apuntan a una sola posición que es lo que conocemos como el haz de electrones, y mezclándose se consigue crear el color deseado. Si queremos conseguir un color gris bastará con poner los valores RGB a la misma intensidad cada uno. Veamos un ejemplo, si queremos que el color 0 sea negro entonces utilizamos los valores (0, 0, 0), o si queremos que sea blanco colocamos los valores (63, 63, 63). Y si lo que queremos es que sea de color rojo intenso ponemos (63, 0, 0) y así se puede jugar con los valores. A continuación les muestro los valores de algunos colores comunes:
Con unos cálculos podemos ver que el numero total de tonalidades disponibles es de 264. 144 (64^3) diferentes, pero solo podremos representar simultáneamente 256, ya que la profundidad es de 8 bits y lo máximo que podemos representar en un byte es el valor 255 (0-255). Pero como podemos cambiar los colores, bueno como dije antes el chip encargado de esta tarea es el DAC o Digital Analog Converter, cuya misión es la de transformas las señales digitales del computador a señales analógicas que utiliza el monitor. Para acceder a este chip y olvidarnos de la BIOS la cual dispone de funciones para trabajar con la paleta, nosotros usaremos tres puertos, a través de los cuales podremos leer y escribir las diferentes componentes de los colores. Estos registros son el 03C7h, el 03C8h y el 03C9h. En el siguiente cuadro podrás encontrar la descripción detallada de cada uno:
Como vemos, para leer el valor actual de un color, lo que tendríamos que hacer es, primero, enviar al puerto 3C7h, el número de color del que queremos obtener los 3 valores, y luego, obtener y leer tres valores del puerto 3C9h, que corresponderán a los valores RGB del color número x que indicamos en el puerto 3C7h. Y si lo que queremos es cambiar los valores RGB de un determinado color, lo que haremos será primero enviar al puerto 3C8h el número del color a cambiar, y después enviar los valores RGB al puerto 3C9h. A continuación veremos las rutinas correspondientes en C, para cambiar y leer los valores RGB de un color determinado. Cambiar los valores RGB de un color:
Y para leer los valores RGB de un color,
se haría así:
Ya sabemos cambiar los colores, ahora veremos como serían las rutinas para cambiar o obtener una paleta. Antes de esto debemos crear una estructura que nos permita guardar las paleta, esto simplemente se puede hacer utilizando un arreglo de tamaño 768 (256*3) y se podría declarar de la siguiente manera: char paleta[768]; o incluso se podría crear un tipo de dato llamado t_paleta, para así hacer mas fácil las declaraciones de paletas en los programas que realicemos, esto sería así: typedef char t_paleta[768]; de esta forma, cuando queramos crear una variable que guarde la paleta, en este caso llamada pal, simplemente la declararíamos así: t_paleta pal; La rutina modificar la paleta sería
así:
Lo que se hace aquí es recorrer los 256 colores, y por cada uno ir cambiando las intensidades RGB correspondientes. Y por último la rutina para obtener
una paleta:
En esta rutina se hace simplemente lo contrario a la rutina SetPal. Nuevamente recorremos los 256 colores, y por cada uno vamos obteniendo las intensidades RGB de cada color. Cuando llamamos a la rutina GetColor debemos pasarle los valores RGB por referencia, es decir la dirección, para que de esta forma salgan modificados. Lo que haría en realidad la rutina GetPal sería obtener la paleta activa que se encuentra en el sistema. Ejemplos Librería gráfica: vgalib.h
|