La Web del Programador: Comunidad de Programadores
 
    Pregunta:  919 - CARGAR UN BMP SIN UTILIZAR LA PALETA EN TURBO C++
Autor:  Jose L. De la Cruz
Hola, ya se como se carga un archivo bmp con una paleta de 256 colores, pero hay archivos bmp que estan guardados sin paleta, es decir con colores en 24 bits (16M de colores), se como leerlos, pero no se como desplegarlos en pantalla. (Esto debe ser utilizando alguna interrupcion, diferente de la 10h seguro). Agradeceria que alguien me diera la nformacion...

  Respuesta:  Fabian Sierra C.
En primer lugar,no debes hacerlo usando interrupciones,sino manipulando el hardware directamente.Como esto es peligroso de hacer,es preferible que (ya que estás usando TurboC) uses un controlador BGI para tarjetas SVGA y las funciones gráficas estándar del compilador.
Existe una diferencia entre disponer de una paleta de 16 millones de colores y poder mostrar 16 millones de colores A LA VEZ en la pantalla.Lo más que se puede mostrar son 32767 colores a la vez.
Un archivo BMP en el que se usen 24 bits por pixel no usa paleta,lo que significa que para cada pixel no se especifica el número del color,sino sus componentes RGB.Atención a esto,ya que para escribir un pixel en la pantalla debes usar su número de color y no sus componentes RGB.La solución que yo he empleado es definir una lista enlazada con la siguiente estructura:
struct rgbcolor{
int numcolor;
char r,g,b;
struct rgbcolor * sgt;
};
Cada vez que leo los 3 bytes que representan un pixel en este formato,compruebo si existe un nodo en la lista que tenga los mismos componentes RGB.Si lo encuentro, retorno numcolor y llamo a putpixel con ese valor.Si no lo encuentro,añado un nodo a la lista con esos componentes y un valor en numcolor mayor en uno al último de la lista.Luego,llamo a setrgbpalette con numcolor y los componentes RGB para ajustar el color y por último llamo a putpixel con numcolor.Es decir,voy creando mi propia paleta y asociando valores a los componentes RGB.En los archivos con paleta,esta ya está creada.