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 (un byte por pixel en modos de 8 bits, sizeof(short) bytes por pixel en modos de 15 y 16 bits por pixel, 3 bytes por pixel en modos de 24 bits y sizeof(long) bytes por pixel en modos de 32 bits). 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:
O para implementar un sistema doble-buffer:putpixel(screen, x, y, color);
Mire abajo para saber cómo obtener acceso directo a la memoria de un bitmap.BITMAP *bmp = create_bitmap(320, 200); // crea un bitmap en la RAM clear_bitmap(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 pantalla
Allegro soporta varios tipos diferentes de bitmaps:
- El bitmap screen, que representa la memoria de vídeo de su hardware. Debe dibujar sobre él 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 múltiples secciones (mire examples/exscroll.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.
- Bitmaps de sistema. Se crean mediante la función create_system_bitmap(), y están a caballo entre los bitmaps de memoria y los de video. Viven en la memoria de sistema, así pues no están limitado por la cantidad de ram de video de su tarjeta, pero se guardan en un formato específico de la plataforma que puede activar una aceleración hardware mejor de la que es posible con un bitmap de memoria normal (vea los bits GFX_HW_SYS_TO_VRAM_BLIT y GFX_HW_SYS_TO_VRAM_BLIT_MASKED en gfx_capabilities). A los bitmaps de sistema se debe acceder de la misma manera que a los bitmaps de video, usando las funciones de cambio de banco y las macro bmp_write*(). No todas las plataformas implementan este tipo de bitmap: si no están disponibles create_system_bitmap() funcionará idénticamente igual que create_bitmap().
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.
Relacionado con: set_gfx_mode, is_screen_bitmap, create_video_bitmap, scroll_screen.BITMAP *create_bitmap(int width, int height);
Relacionado con: create_bitmap_ex, create_sub_bitmap, create_video_bitmap, destroy_bitmap, set_color_depth, is_memory_bitmap.BITMAP *create_bitmap_ex(int color_depth, int width, int height);
Relacionado con: create_bitmap, create_sub_bitmap, create_video_bitmap, destroy_bitmap, is_memory_bitmap.BITMAP *create_sub_bitmap(BITMAP *parent, int x, y, width, height);
Relacionado con: create_bitmap, create_bitmap_ex, destroy_bitmap, is_sub_bitmap.BITMAP *create_video_bitmap(int width, int height);
Relacionado con: create_bitmap, create_bitmap_ex, create_sub_bitmap, destroy_bitmap, screen, show_video_bitmap, gfx_capabilities, is_screen_bitmap.BITMAP *create_system_bitmap(int width, int height);
Relacionado con: create_bitmap, create_bitmap_ex, create_video_bitmap, create_sub_bitmap, destroy_bitmap, is_system_bitmap.void destroy_bitmap(BITMAP *bitmap);
Relacionado con: create_bitmap, load_bitmap.void lock_bitmap(BITMAP *bitmap);
int bitmap_color_depth(BITMAP *bmp);
Devuelve la profundidad de color del bitmap especificado (8, 15, 16, 24,
o 32).
Relacionado con: set_color_depth, bitmap_mask_color.int bitmap_mask_color(BITMAP *bmp);
Relacionado con: MASK_COLOR_8, set_color_depth, bitmap_color_depth.int is_same_bitmap(BITMAP *bmp1, BITMAP *bmp2);
Relacionado con: create_sub_bitmap.int is_linear_bitmap(BITMAP *bmp);
Relacionado con: is_planar_bitmap, is_memory_bitmap.int is_planar_bitmap(BITMAP *bmp);
Relacionado con: is_linear_bitmap, is_memory_bitmap.int is_memory_bitmap(BITMAP *bmp);
Relacionado con: is_linear_bitmap, is_planar_bitmap.int is_screen_bitmap(BITMAP *bmp);
Relacionado con: screen, create_video_bitmap, create_sub_bitmap.int is_video_bitmap(BITMAP *bmp);
Relacionado con: screen, create_video_bitmap, create_sub_bitmap.int is_system_bitmap(BITMAP *bmp);
Relacionado con: create_system_bitmap, create_sub_bitmap.int is_sub_bitmap(BITMAP *bmp);
Relacionado con: create_sub_bitmap.void acquire_bitmap(BITMAP *bmp);
Relacionado con: release_bitmap, acquire_screen, release_screen.void release_bitmap(BITMAP *bmp);
Relacionado con: acquire_bitmap, acquire_screen, release_screen.void acquire_screen();
Relacionado con: acquire_bitmap, release_bitmap, release_screen.void release_screen();
Relacionado con: acquire_bitmap, release_bitmap, acquire_screen.void set_clip(BITMAP *bitmap, int x1, int y1, int x2, int y2);