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);
Relacionado con: get_rle_sprite.void draw_rle_sprite(BITMAP *bmp, const RLE_SPRITE *sprite, int x, int y);
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);
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);
Relacionado con: draw_rle_sprite, draw_trans_rle_sprite, draw_lit_sprite, color_map, set_trans_blender, bitmap_mask_color.