La Web del Programador: Comunidad de Programadores
 
    Pregunta:  1333 - PCX EN FORMATO DE 16 COLORES
Autor:  carlos iturralde
programo en c++ bajo dos y tengo varios archivos que explican el formato pcx (tanto en c como en pascal), pero todos ellos hacen referencia a 256 y más colores y ninguno a los 16 colores, traté entonces de visualizar un pcx con este número de colores y el resultado fue que se ve la imagen como en tercera dimensión PERO SIN LOS LENTES CORRESPONDIENTES, es decir, borrosa, asi que ahí lo tienen, muchas gracias de antemano (imagino que tendra que ver con lo de las páginas de video).

  Respuesta:  Jose Luis De la Cruz
Hola amigo hace tiempo tuve un problema parecido al tuyo y lo solucione leyendo el valor de bits per pixel en la

cabecera del pcx

Desplazamiento (bytes) / constantes de cabecera
0 Manufacturer Version (2 bytes)
2 Encoding (1 byte)
3 Bits Per Pixel (1 byte)
4 XMin, Ymin, XMax, YMax (2 bytes c/u)
12 Horizontal Resolution (2 bytes)
14 Verticle Resolution (2 bytes)
16 Color pallette setting (48 bytes)
64 Reserved
65 Number of color planes
66 Bytes per line (2 bytes)
68 1 = Color 2 = Grayscale (2 bytes)
70 Blank (58 bytes)

bits per pixel es un char que contiene 8 si el pcx es de 256 colores y 4 si es de 16 colores, para leerlo puedes hacerlo como sigue:

File *fp;
char bpp;// bytes por pixel
fseek (fp,3L,SEEK_SET); //se desplaza 3 bytes desde el inicio del pcx
fread(&bpp,1,1,fp); // se lee 1 byte

si todavia no se arregla con lo anterior entonces el error se puede deber al contenido de la constante bytes per line, esto es porque existen algunos programas ( como el MS photo editor ) cambian el ancho real del pcx a su multiplo de 4 mayor mas cercano, y este valor justo se encuentra almacenado en bytes per line.... si deseas ver un ejemplo en c++ visita mi pagina web http://www.geocities.com/joseluisdl/jldl.htm
suerte...y si necesitas mas ayuda escribeme...