Progrmacion 3D S

Páginas: 176 (43859 palabras) Publicado: 31 de julio de 2012
Código que carga imágenes numeradas consecutivamente, las une en un solo archivo y guarda el resultado en disco.

Este código lo creé por la necesidad de unir automáticamente las imágenes que se pueden encontrar aquí para utilizarlas en el 3dgs como sprites animados.
|
#include <acknex.h>

#define Cantidad_Cuadros 33 // Número de imágnes#define Paso_Animacion 75 // Anchura de cada cuadro de animación
#define Base_Altura 100 // Altura de cada cuadro de animación
#define STR_Archivo "roda_frog" // Nombre base de los archivos de imágenes

function main ()
{
    video_set ( sys_metrics(0), sys_metrics(1), 32, 1 ); // Resolución de escritorio
    
    var Contador = 0, i, ii; // Contadores    BMAP* Base = bmap_createblack ( Paso_Animacion*Cantidad_Cuadros, Base_Altura, 32 ); // Imagen donde se irá añadiendo cada cuadro
    BMAP* Trozo = bmap_createblack ( Paso_Animacion , Base_Altura , 32 ); // Imagen donde se copiará cada archivo
    BMAP* Precarga; //Imagen donde se cargará cada imagen para conocer sus dimensiones
    STRING* Nombre = "#40"; // Cadena de texto para nombres de archivos    COLOR Color_Base; // Color del pixel superior izquierdo de ña primera imagen
    COLOR Color_Pixel; // Color para lectura de pixeles
    var Pixel; // Variable para puntero a pixel
    var Formato; // Variable para guardar el formato de las imágenes
    
    while ( Contador<Cantidad_Cuadros )
    {
        Contador ++;
        
        str_cpy ( Nombre, STR_Archivo ); // Generar nombre de la imagen según el contador
        if ( Contador < 1000 )            str_cat ( Nombre, "0" );
        if ( Contador < 100 )
            str_cat ( Nombre, "0" );
        if ( Contador < 10 )
            str_cat ( Nombre, "0" );
        str_cat_num ( Nombre, "%.0f", Contador );
        str_cat ( Nombre, ".bmp" );
        
        Precarga = bmap_create ( Nombre ); // Cargar imagen para utilizar sus dimensiones        bmap_load ( Trozo, Nombre, 1 ); // Copiar imagen desde .bmp indexado
        
        if ( Contador == 1 ) // Hallar color del pixel superior izquierdo de la primera imagen
        {
            Formato = bmap_lock ( Trozo, 0 );
            Pixel = pixel_for_bmap( Trozo, 0, 0 );
            pixel_to_vec ( Color_Base, NULL, Formato, Pixel);            bmap_fill ( Base, Color_Base, 100 ); // Colorear el fondo del mismo color que la base de las imagenes originales
            bmap_unlock ( Trozo );
        }
        
        bmap_blit ( Base, Trozo, vector(((Contador-1)*Paso_Animacion)+integer(Paso_Animacion/2)-integer(bmap_width(Precarga)/2),Base_Altura-bmap_height(Precarga),0), vector(bmap_width(Trozo),bmap_height(Trozo),0) ); // Copiar a imagen base
    }
    
        Formato = bmap_lock ( Base, 0 ); // Generar Canal Alfa
    for ( i=0; i<Paso_Animacion*Cantidad_Cuadros; i++ ) 
    {
        for ( ii=0; ii<Base_Altura; ii++ )
        {
            Pixel = pixel_for_bmap( Base, i, ii );
            pixel_to_vec ( Color_Pixel, NULL, Formato, Pixel);
            if ( vec_dist ( Color_Pixel, Color_Base ) == 0 )
            {
                Pixel = pixel_for_vec ( Color_Pixel, 0, Formato );                pixel_to_bmap ( Base, i, ii, Pixel );
            }
        }
    }
    bmap_unlock ( Base );
    
    str_cpy ( Nombre, STR_Archivo ); // Generar nombre del resultado
    str_cat_num ( Nombre, "+%.0f", Contador );
    str_cat ( Nombre, ".tga" );
    
    bmap_save ( Base, Nombre ); // Salvar resultado
    
    
    while (!key_esc)
    {        for ( i=0; i<screen_size.y/Base_Altura; i++) // Mostrar resultado
            draw_quad( Base, vector(-screen_size.x*i,Base_Altura*i,0), NULL, NULL, NULL, NULL, 100, 0 );
        
        wait(1);
    }
    
    sys_exit ( NULL ); // Salir
} | |

Solamente quedaría recortar el TGA a las dimensiones...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Progrmacion
  • progrmacion
  • Progrmacion
  • progrmacion
  • Progrmacion
  • progrmacion
  • progrmacion
  • Progrmacion

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS