13 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 objeto bitmap y pulsando el botón 'RLE'.

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

void destroy_rle_sprite(RLE_SPRITE *sprite);
Destruye una estructura de sprite RLE previamente creada por get_rle_sprite().

void draw_rle_sprite(BITMAP *bmp, RLE_SPRITE *sprite, int x, int y);
Dibuja un sprite RLE en el bitmap en la posición especificada.

void draw_trans_rle_sprite(BITMAP *bmp, RLE_SPRITE *sprite, int x, int y);
Versión translucente de draw_rle_sprite(). Lea la descripción de draw_trans_sprite(). Esto sólo lo puede usar después de haber creado una tabla de colores (para modos de 256 colores) o un mapa de fundido (para modos truecolor).

void draw_lit_rle_sprite(BITMAP *bmp, RLE_SPRITE *sprite, int x, y, color);
Versión entintada de draw_rle_sprite(). Lea la descripción de draw_lit_sprite(). Esto sólo lo puede usar después de haber creado una tabla de colores (para modos de 256 colores) o un mapa de fundido (para modos truecolor).




Volver al Indice