La Web del Programador: Comunidad de Programadores
 
    Pregunta:  1815 - PREGUNTA ACERCA DE GRÁFICOS EN C
Autor:  Juanjo
Soy nuevo en esto de los gráficos en C, y la verdad es que aunque tengo programas ejemplo, hay ciertas cosas que no entiendo. La mayor de mis dudas es ahora la declaración de esta estructura:
(El programa carga una imagen con una paleta a partir del fichero SVGA256.BGI con installuserdriver())

typedef struct
{
unsigned char R, G, B;
} RGBColor;
typedef RGBColor VGAPalette[256];

Lo cual equivale a:

typedef struct
{
unsigned char R, G, B;
} VGAPalette[256];

Yo entiendo que esto no es un array de estructuras, por lo cual no entiendo la utilizacion que de esa estructura se hace cuando se declara:

VGAPalette VGAPal;

para luego leer por ejemplo la cabezera del fichero imagen (*.cap) con

fread(VGAPal,1,768,fp);

MUCHÍSISIMAS GRACIAS POR ADELANTADO

  Respuesta:  José Luis Torres Pantoja
Saludos
No estoy seguro de haber entendido tu pregunta, pero tal parece que lo que quieres saber es el porqué o para que están utilizando esa estructura, bueno lo que sucede es que estás leyendo un archivo que contiene una imagen, como la imagen tiene una paleta de colores que tal vez no cooincida en valores y/o en tamaño con la que estás usando, es necesario primero leer la paleta, que es lo que hacen con la operación fread, a continuación seguramente llaman a una función donde cambian la paleta actual por la paleta que fué leída y por último se lee pixel a pixel la imagen. Espero que sea la respuesta que necesitabas. Si aún tienes duda con el manejo de gráficos mándame un mail

  Respuesta:  Santiago Gomez Carpizo
Hola, no se mucho de C, pero la bronca en cuestión no es grafica, es tan solo de comprensión del manejo de la estructura.

En la estructura :

typedef struct
{
unsigned char R, G, B;
} VGAPalette[256];

cada dato, R,G y B son de tipo unsigned char, lo cual en número de bytes es de 1 para cada uno (sizeof(unsigned char)), y ademas lo declaras como un arreglo de 256 elementos, por lo cual si multiplicas los 256 elementos por 3 (el size de la estructura, obtenida de la sumatoria del size de R, G Y B) nos da 768 bytes.

Después usando la sintaxis del fread,

fread(VGAPal,1,768,fp);

significa, que vas a leer del disco 1 vez 768 bytes, almacenando esa lectura en VGAPal.

Es decir, estas leyendo 768 bytes, ya que ese es el size de la estructura que usas.

Ok. Espero haberles ayudado.

Atte. Chago