Una vez haya seleccionado un modo gr�fico, puede dibujar cosas en la pantalla por el bitmap 'screen'. Todas las rutinas de dibujo de Allegro dibujan en estructuras BITMAP, que son �reas de memoria que contienen im�genes rectangulares, almacenadas en arrays de packs de bytes (ocho bits por pixel). Puede crear y manipular bitmaps en la memoria RAM, o puede dibujar en el bitmap especial 'screen' que representa la memoria de v�deo de su tarjeta gr�fica.
Por ejemplo, para dibujar un pixel en la pantalla escribir�a:
putpixel(screen, x, y, color);O para implementar un sistema doble-buffer:
BITMAP *bmp = create_bitmap(320, 200); // crea un bitmap en la RAM clear(bmp); // limpia el bitmap putpixel(bmp, x, y, color); // dibuja sobre el bitmap blit(bmp, screen, 0, 0, 0, 0, 320, 200); // lo copia a la pantallaMire abajo para saber c�mo obtener acceso directo a la memoria de un bitmap.
Allegro soporta varios tipos diferentes de bitmaps:
- El bitmap screen, que representa la memoria de v�deo de su hardware. Debe dibujar sobre el para que su imagen sea visible.
- Bitmaps de memoria, que est�n situados en la RAM del sistema y pueden ser usados para almacenar gr�ficos o como espacios de dibujo temporales para sistemas doble buffer. Estos pueden ser obtenidos llamando create_bitmap(), load_pcx(), o al cargar un fichero de datos.
- Sub-bitmaps. Estos comparten memoria de imagen con un bitmap padre (que puede ser la pantalla, un bitmap de memoria u otro sub-bitmap), por lo que dibujar en ellos tambi�n modificar� al bitmap padre. Pueden tener cualquier tama�o y estar localizados en cualquier parte del bitmap padre. Pueden tener sus propias �reas de recorte, por lo que son �tiles para dividir un bitmap en varias unidades m�s peque�as, ej: partir una pantalla virtual grande en dos secciones para hacer intercambio de p�ginas (mire examples/ex9.c).
- Bitmaps de memoria de v�deo. Estos son creados con la funci�n create_video_bitmap(), y normalmente son implementados como sub-bitmaps del objeto screen.
extern BITMAP *screen;
Puntero global a un bitmap, de tama�o VIRTUAL_W x VIRTUAL_H. Esto es
creado por set_gfx_mode(), y representa la memoria de v�deo de su
hardware. S�lo una parte de este bitmap ser� visible, de tama�o SCREEN_W
x SCREEN_H. Normalmente estar� en la parte superior izquierda de la
pantalla virtual, por lo que puede ignorar el resto de la pantalla
virtual si no est� interesado en scroll por hardware o intercambio de
p�ginas. Para mover la ventana visible a otras partes del bitmap screen,
llama scroll_screen(). Inicialmente el �rea de recorte ser� igual de
grande que la pantalla f�sica, por lo que si quiere dibujar en la
pantalla virtual fuera de este rect�ngulo, deber� ajustar el �rea de
recorte.
BITMAP *create_bitmap(int width, int height);
Crea un bitmap de memoria con tama�o width por height, y devuelve un
puntero a �l. El bitmap tendr� el �rea de recorte activada y ajustada al
tama�o total del bitmap. La memoria de la imagen no ser� limpiada, por lo
que probablemente tendr� basura: deber�a limpiar el bitmap antes de
usarlo. Esta rutina usa siempre el formato global de profundidad de color
especificado al llamar set_color_depth().
BITMAP *create_bitmap_ex(int color_depth, int width, int height);
Crea un bitmap de una profundidad de color espec�fica (8, 15, 16, 24 o 32
bits por pixel).
BITMAP *create_sub_bitmap(BITMAP *parent, int x, y, width, height);
Crea un sub-bitmap, es decir, un bitmap que comparte memoria con un
bitmap ya existente, pero posiblemente con un tama�o y �rea de recorte
diferentes. Cuando cree un sub-bitmap de la pantalla en modo-X, la
posici�n x debe ser un m�ltiplo de cuatro. La anchura y altura del
sub-bitmap pueden extenderse fuera de los bordes del bitmap padre (ser�n
recortados), pero el punto de origen debe estar en una regi�n del bitmap
padre.
BITMAP *create_video_bitmap(int width, int height);
Reserva un bitmap de memoria de v�deo del tama�o especificado,
devolviendo un puntero si funcion�, o NULL si hubo alg�n error (ej: se
has quedado sin memoria vram libre). Esto puede ser usado para reservar
memoria de v�deo oculta para almacenar gr�ficos preparados para
operaciones aceleradas por hardware, o para crear m�ltiples p�ginas de
v�deo que luego pueden ser visualizadas con show_video_bitmap(). Los
bitmaps de memoria de v�deo son normalmente reservados usando el mismo
espacio que el bitmap screen, ya que pueden sobreescribirlo: por lo tanto
no es una buena idea usar screen al mismo tiempo que las superficies
devueltas por esta funci�n.
void destroy_bitmap(BITMAP *bitmap);
Destruye un bitmap de memoria o sub-bitmap cuando ya no lo necesite.
int bitmap_color_depth(BITMAP *bmp);
Devuelve la profundidad de color del bitmap especificado (8, 15, 16, 24,
o 32).
int bitmap_mask_color(BITMAP *bmp);
Devuelve el color de m�scara del bitmap especificado (el valor que es
ignorado al dibujar sprites). En bitmaps de 256 colores es cero, y en
bitmaps truecolor es rosa fucsia (rojo y azul al m�ximo, verde a cero).
int is_same_bitmap(BITMAP *bmp1, BITMAP *bmp2);
Devuelve TRUE si ambos bitmaps describen el mismo �rea de dibujo, ej: sus
punteros son iguales, uno es un sub-bitmap del otro, o ambos son
sub-bitmaps de un padre com�n.
int is_linear_bitmap(BITMAP *bmp);
Devuelve TRUE si bmp es un bitmap lineal, es decir, es un bitmap de
memoria, pantalla en modo 13h o SVGA. En bitmaps lineales puede usar las
funciones _putpixel(), _getpixel(), bmp_write_line(), y bmp_read_line().
int is_planar_bitmap(BITMAP *bmp);
Devuelve TRUE si bmp es un bitmap de pantalla plano (modo-X o Xtended).
int is_memory_bitmap(BITMAP *bmp);
Devuelve TRUE si bmp es un bitmap de memoria, es decir, que fue creado
llamando create_bitmap() o cargado de un fichero de datos o una imagen.
Los bitmaps de memoria pueden ser accedidos con los punteros de l�nea de
la estructura bitmap, ej: bmp->line[y][x] = color.
int is_screen_bitmap(BITMAP *bmp);
Devuelve TRUE si bmp es el bitmap screen, o un sub-bitmap de �l.
int is_sub_bitmap(BITMAP *bmp);
Devuelve TRUE si bmp es un sub-bitmap.
void set_clip(BITMAP *bitmap, int x1, int y1, int x2, int y2);
Cada bitmap tiene un �rea de recorte asociada, que es el �rea de pantalla
sobre la que puede dibujar. Nada ser� dibujado fuera de este espacio.
Para las dos esquinas opuestas del �rea de recorte: �stas son inclusivas,
ej: set_clip(bitmap, 16, 16, 32, 32) se permitir� dibujar en (16, 16) y
(32, 32), pero no en (15, 15) o (33, 33). Si x1, y1, x2 e y2 son cero, el
�rea de recorte se desactivar�, lo que puede acelerar algunas operaciones
de dibujo (normalmente casi nada, aunque cualquier poco ayuda) pero har�n
que su programa muera horriblemente si intenta dibujar fuera de los
bordes del bitmap.