14 Sprites RLE

Ya que los bitmaps pueden ser usados de tantas maneras diferentes, la estructura bitmap es bastante complicada y contiene muchos datos. En muchas ocasiones, sin embargo, se encontrará almacenando imágenes que sólo son copiadas en la pantalla, en vez de pintar en ellas o usarlas como patrones de relleno, etc. Si este es el caso, sería mejor que usase estas imágenes en estructuras RLE_SPRITE o COMPILED_SPRITE en vez de bitmaps normales.

Los sprites RLE almacenan la imagen en un formato simple run-length, donde los pixels cero repetidos son sustituidos por un contador de longitud, y las series de pixels, que no son cero, son precedidos por un contador que da la longitud del recorrido sólido. Los sprites RLE son normalmente más pequeños que los bitmaps, tanto por la compresión run length como porque evitan la mayoría de sobrecarga de la estructura bitmap. También son normalmente más rápidos que bitmaps normales, porque en vez de tener que comparar cada pixel individual con cero para determinar si hay que dibujarlo, es posible saltarse una serie de ceros con una simple suma, o copiar una serie larga de pixels que no son cero con rápidas instrucciones de cadena.

Sin embargo no es oro todo lo que reluce, y hay una falta de flexibilidad con los sprites RLE. No puede dibujar en ellos, y no puede invertirlos, rotarlos o modificar su tamaño. De hecho, lo único que puede hacer con ellos es copiarlos en un bitmap con la función draw_rle_sprite(), que es equivalente a usar draw_sprite() con un bitmap normal. Puede convertir bitmaps en sprites RLE en tiempo real, o puede crear estructuras de sprites RLE en los ficheros de datos con el grabber, creando un nuevo objeto de tipo 'RLE sprite'.


RLE_SPRITE *get_rle_sprite(BITMAP *bitmap);
Crea un sprite RLE basándose en el bitmap especificado (que debe ser un bitmap de memoria).

Relacionado con: draw_sprite, stretch_blit, bitmap_mask_color.
void destroy_rle_sprite(RLE_SPRITE *sprite);
Destruye una estructura de sprite RLE previamente creada por get_rle_sprite().
Relacionado con: get_rle_sprite.
void draw_rle_sprite(BITMAP *bmp, const RLE_SPRITE *sprite, int x, int y);
Dibuja un sprite RLE en el bitmap en la posición especificada.
Relacionado con: draw_trans_rle_sprite, draw_lit_rle_sprite, bitmap_mask_color, get_rle_sprite, draw_sprite, draw_compiled_sprite.
void draw_trans_rle_sprite(BITMAP *bmp, const RLE_SPRITE *sprite, int x, int y);
Versión translúcida de draw_rle_sprite(). Vea la descripción de draw_trans_sprite(). Sólo debe ser usado después de que haya creado la tabla de color (para modos de 256 colores) o funciones de fundido (para modos truecolor). El bitmap y el sprite deben, normalmente, tener la misma profundidad de color, pero como caso especial puede dibujar sprites en formato RGBA de 32 bits en cualquier bitmap hicolor o truecolor, siempre y cuando llame a set_alpha_blender() antes.
Relacionado con: draw_rle_sprite, draw_lit_rle_sprite, draw_trans_sprite, color_map, set_trans_blender, set_alpha_blender, bitmap_mask_color.
void draw_lit_rle_sprite(BITMAP *bmp, const RLE_SPRITE *sprite, int x, y, color);
Versión teñida de draw_rle_sprite(). Lea la descripción de draw_lit_sprite(). Esta sólo debe usarse después de que haya construído la tabla de color (para modos de 256 colores) o funciones de fundido (para modos truecolor).
Relacionado con: draw_rle_sprite, draw_trans_rle_sprite, draw_lit_sprite, color_map, set_trans_blender, bitmap_mask_color.

Volver al Indice