Gráficos tc 3.01

Como se carga una paleta de 256 colores en turbo c++ de ms-dos

1 Respuesta

Respuesta
1
Existen dos posibilidades, dependiendo de como estés intentando hacerlo.
--Utilizando el driver BGI correspondiente.
En este caso basta con utilizar la función
Setrgbpalette(color, R, G, B) : color es el color a cambiar, en este caso de 0 a 255 y R, G, B son las componentes Roja, Verde y Azul. Las tres componentes van de 0 a 255.
.. El otro sistema es accediendo a los puertos de la VGA. Supongo que este es tu caso.
En este caso tenemos que saber que hay dos puertos :
* 0x3c8 : En este puerto tenemos que escribir el color que deseamos cambiar. En este caso de 0 a 255.
Cuando se escriben las tres componentes se incrementa automáticamente.
* 0x3c9 : En este otro tenemos que escribir las componentes R/G/B de la paleta para el color indicado. Despues de cada escritura se incrementa automáticamente.
Para escribir en los puertos contamos con la función outportb. Para escribir por ejemplo el valor 0 en el puerto 0x3c8, se debe escribir :
ourportb(0x3c8,0);
De acuerdo con lo explicado anteriormente, para actualizar la paleta del color numero 15 y ponerlo a negro (0,0,0) tendremos que escribir un fragmento de código como el que sigue :
outportb(0x3c8,15);
outportb(0x3c9,0); // Rojo
outportb(0x3c9,0); // Verde
outportb(0x3c9,0); // Azul
En caso de que queramos cambiar la paleta completa. Suponiendo que la paleta la tenemos en un vector de 256*3 elementos. Lo podemos hacer del siguiente modo :
outportb(0x3c8,0);
for(n = 0;n < 256*3;n++) {
outportb(0x3c9,Paleta[n]);
}
Paleta contiene las componentes RGB de cada color en orden.
-- Consideraciones finales :).
Mientras que con el setrgbpalette del driver BGI las componentes son de 0 a 255, es decir, utilizan los 8 bits, en este ultimo caso, solo se utilizan 6. Esto quiere decir, que en caso de que tengas la paleta con componentes de 0 a 255, lo cual es bastante común en algunos formatos gráficos, esta tiene que ser adaptada para que la visualización sea correcta.
Dado que en la paleta tenemos 8 bits, y queremos que cada componente solo utilize 6, para adaptarla simplemente podemos desplazar cada componente 2 posiciones a la derecha mediante el operador >>
Para convertir una paleta completa :
for(n = 0;n < 256*3;n++) {
Paleta[n] >>= 2;
}
Creo que eso era todo :).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas