c++ - JPG images correctly loads but not showing on SDL -
i have load , show 20 random images 6750 jpg images. images in jpg format , shows not , not always. part loads images using img_load (sorry, english bad).
i have image lib correctly installed. code fine because png images works, problem jpg images , have use 6570 of them.
int i=0,ra; srand(time(null)); char name[18]; while(i<10){ ra=rand()%675+1; sprintf(name, "icons/icono (%d).jpg",ra); strcpy(imgs[i], name); imas[i] = img_load(imgs[i]); printf("icono %s charged\n",imgs[i]); i++;}
with printf can check if imgs correctly loaded, know no errors code, when run program, 2 or 4 images shows , no more.
this entire code (ignore comments if dont speak spanish):
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #include <sdl/sdl.h> #include <sdl/sdl_image.h> #include <sdl/sdl_mixer.h> void limpiar (sdl_surface *screen); //declaración de funciones void imprimir(sdl_surface *screen, sdl_surface *ima, int x, int y); void mover_objeto(int *x, int *y, int ancho, int alto); int main(int argc, char *argv[]){ sdl_surface *screen; //la superficie contenedora sdl_surface *ima, *imag, *imas[11]; //la superficie de imagen mix_music *cancion; //el sonido que tenemos sdl_event event; //evento usar en el programa int salir = 0; //salir esta en falso int x = 20; //coordenada x de la imagen int y = 100; //coordenada y de la imagen if (sdl_init(sdl_init_video | sdl_init_audio) == -1){ printf("error: %s\n", sdl_geterror()); return 1;} //inicialización screen = sdl_setvideomode(360, 450, 16, sdl_hwsurface); //superficie contenedora if (screen == null){ printf("error: %s\n", sdl_geterror()); return 1;} //en caso de error de superficie sdl_wm_setcaption("memorice warcraft", null); //titulo de la ventana //************* imagen **************** char imgs[11][18]; imag = img_load("icons/00.png"); int i=0,ra; //i para carga de imagenes srand(time(null)); //para no repetir el random char name[18]; //en name almacenaremos cada nombre de imagen while(i<10){ ra=rand()%675+1; sprintf(name, "icons/icono (%d).jpg",ra); strcpy(imgs[i], name); imas[i] = img_load(imgs[i]); //cargo las imagenes al arreglo printf("icono %s cargado\n",imgs[i]); //print guardado en stdout.txt i++;} //************* audio **************** if (mix_openaudio(44100, mix_default_format, 2, 4096) == -1){ printf("error en mix_openaudio: %s\n", mix_geterror()); //abrimos un audio de fondo return 1;} cancion = mix_loadmus("bnet.wav"); //cargamos la cancion if (!cancion) printf("error en mix_loadmus: %s\n", mix_geterror()); //o tiramos error if (cancion){ if (mix_playmusic(cancion, -1) == -1) //corre la pista de musica o error printf("error en mix_playmusic: %s\n", mix_geterror());} //************** while de ejecución ************* while (! salir){ //mientras no hayamos salido del juego sdl_pollevent(&event); //esperamos pulsación de tecla if (event.type == sdl_quit) salir = 1; //si cerramos la ventama, salimos limpiar(screen); //llamamos funcion que actualiza int j=0; int px=20,py=100; while(j<20){ imprimir(screen, imag, px, py); //pintamos escudos px+=64; if(j==4 || j==9 || j== 14){py+=64;px=20;} j++;} uint8 *key = sdl_getkeystate(null); if (key[sdlk_4]) //al presionar tecla imprimir(screen, imas[0], 20, 100); //mostramos imagen respectiva if (key[sdlk_5]) imprimir(screen, imas[1], 84, 100); if (key[sdlk_6]) imprimir(screen, imas[2], 148, 100); if (key[sdlk_7]) imprimir(screen, imas[6], 212, 100); if (key[sdlk_8]) imprimir(screen, imas[7], 276, 100); if (key[sdlk_e]) imprimir(screen, imas[8], 20, 164); if (key[sdlk_r]) imprimir(screen, imas[3], 84, 164); if (key[sdlk_t]) imprimir(screen, imas[0], 148, 164); if (key[sdlk_y]) imprimir(screen, imas[2], 212, 164); if (key[sdlk_u]) imprimir(screen, imas[9], 276, 164); if (key[sdlk_s]) imprimir(screen, imas[1], 20, 228); if (key[sdlk_d]) imprimir(screen, imas[4], 84, 228); if (key[sdlk_f]) imprimir(screen, imas[6], 148, 228); if (key[sdlk_g]) imprimir(screen, imas[7], 212, 228); if (key[sdlk_h]) imprimir(screen, imas[8], 276, 228); if (key[sdlk_z]) imprimir(screen, imas[9], 20, 292); if (key[sdlk_x]) imprimir(screen, imas[5], 84, 292); if (key[sdlk_c]) imprimir(screen, imas[3], 148, 292); if (key[sdlk_v]) imprimir(screen, imas[4], 212, 292); if (key[sdlk_b]) imprimir(screen, imas[5], 276, 292); sdl_flip(screen); //mostramos la superficie contenedora sdl_delay(10); //delay de actualización } if (cancion){ mix_haltmusic(); //forma correcta de terminar el audio mix_freemusic(cancion);} mix_closeaudio(); sdl_quit(); return 0; } void limpiar (sdl_surface *screen){ //funcion que actualiza uint32 = sdl_maprgb(screen->format, 50, 100, 155); //fondo azulado sdl_fillrect(screen, null, a); //ponemos el fondo } //pinta la imagen en la surface, recibiendo la imagen, x e y void imprimir(sdl_surface *screen, sdl_surface *ima, int x, int y){ sdl_rect rect = {x, y, 0, 0}; //crea un nuevo rectángulo sdl_blitsurface(ima, null, screen, &rect); //para pintar la imagen } void mostrar_imagen(sdl_surface *screen, sdl_surface *imas){ uint8 *boton = sdl_getkeystate(null); if (boton[sdlk_e]) printf("ok adasdsad %d",1); }
i know solution use png images, dont know how convert 6750 of them in less 1 week.
if of know solution or how convert 6750 jpg images png in minits or less, i'll greatful.
Comments
Post a Comment