Autor
|
Tema: fondo sdl con foto (Leído 4,716 veces)
|
peterfly
Desconectado
Mensajes: 94
|
teniendo el codigo: #include <stdio.h> #include <SDL/SDL.h> void imprimir_rectangulo (SDL_Surface *screen, int x, int y); int main(int argc, char *argv[]) { SDL_Surface *screen; SDL_Event event; if (SDL_Init(SDL_INIT_VIDEO) == -1) { printf("Error: %s\n", SDL_GetError()); return 1; } screen = SDL_SetVideoMode(320, 240, 16, SDL_SWSURFACE); if (screen == NULL) { printf("Error: %s\n", SDL_GetError()); return 1; } SDL_WM_SetCaption("Ejemplo básico", NULL); imprimir_rectangulo(screen, 20, 30); while (SDL_WaitEvent(&event)) { if (event.type == SDL_QUIT) break; } SDL_Quit(); return 0; } void imprimir_rectangulo (SDL_Surface *screen, int x, int y) { SDL_Rect rect = {x, y, 50, 50}; Uint32 a = SDL_MapRGB(screen->format, 255, 200, 100); SDL_FillRect(screen, &rect, a); SDL_UpdateRect(screen, rect.x, rect.y, rect.w, rect.h); } como puedo poner una foto envez del cuadrado??? se que seria dando un enlace a donde esta la foto en mi pc... pero como se ace no lo se me podeis ayudar?? gracias
|
|
« Última modificación: 23 Septiembre 2011, 16:28 pm por peterfly »
|
En línea
|
|
|
|
Quake-man
Desconectado
Mensajes: 51
|
Ok lo primero que tienes que hacer es crear una superficie nueva con :
SDL_Surface * ejemplo
después tienes que asignarle a la capa la imagen así
ejemplo = SDL_LoadBMP ("ejemplo.bmp")//las comillas van incluidas
una vez que le asignes a la superficie la imagen hay que cargarla así
SDL_BlitSurface (ejemplo , NULL, screen, Rect); el primer parametro es la imagen,el segundo no me acuerdo ejjeje lo siento,el tercero osea screen es la pantalla a la cual la vamos a volcar y rect son las coordenadas de la imagen .
una vez echo esto tienes que colocar esto:
SDL_Flip (screen);
esta función es para dibujar la imagen en la pantalla,el paramento que esta entre paréntesis es la superficie donde quieres dibujarla.
probablemente cuando dibujes la imagen en pantalla en caso de ser un sprite se vera rodeada de un cuadrado de algun color para que esto no se vea tienes que poner antes de :
SDL_BlitSurface (ejemplo , NULL, screen, Rect);
SDL_SetColorKey(ejemplo,SDL_SRCCOLORKEY,SDL_MapRGB(ejemplo>format,255,0,255));
es para que ese color no aparezca por que el primer parámetro es a la superficie a la que se la quieres aplicar el segundo parámetro es que quieres que un determinado color no aparezca y luego especificas el color que no quieres que aparezca y ya está espero que te haya servido =)
|
|
|
En línea
|
|
|
|
peterfly
Desconectado
Mensajes: 94
|
muchisimas gracias compañero voy a probarlo
|
|
|
En línea
|
|
|
|
peterfly
Desconectado
Mensajes: 94
|
problema resuelto!!! #include <stdio.h> #include <stdlib.h> #include <SDL/SDL.h> /* se incluye SDL_image.h para los metodos de carga de imagenes */ #include <SDL/SDL_image.h> /* metodo que permite cargar imagenes y las devuelve como SDL_Surface */ SDL_Surface* cargarImagen(char *rejilla) { /* SDL tiene metodos para cargar cada tipo de imagen BMP,PCX,JPG,GIF,etc. pero este metodo (IMG_Load()) automaticamente carga imagenes sin preguntar el tipo*/ SDL_Surface *image = IMG_Load(rejilla); return image; } /* metodo que permite dibujar una *imagen previamente cargada (con cargarImagen()), y dibujarla en una superficie dada (en este caso *screen), en la posicion (x,y)*/ void dibujaImagen(SDL_Surface *screen, SDL_Surface *imagen, int x, int y) { /* se crea un rectangulo */ SDL_Rect rect; /* se le asigna donde empieza en x el rectangulo */ rect.x=x; /* se le asigna donde empieza en y el rectangulo */ rect.y=y; /* se pega la imagen sobre screen de acuerdo a la posicion del rectangulo */ SDL_BlitSurface(imagen, 0, screen, &rect); } int main(int argc, char *argv[]) { SDL_Surface* screen; if (SDL_Init(SDL_INIT_VIDEO)<0) { printf("Error al iniciar SDL:: %s",SDL_GetError()); return -1; } screen = SDL_SetVideoMode(640,480,16,SDL_HWSURFACE|SDL_RESIZABLE); if (!screen) { printf("Error al iniciar el contexto SDL:: %s",SDL_GetError()); return -1; } SDL_WM_SetCaption(":: Carga de imagen con SDL ::",NULL); /* llamamos al metodo para que cargue la imagen "foto.jpg" */ SDL_Surface* img = cargarImagen("rejilla.jpg"); /* preguntamos si realmente se cargo la imagen */ if (!img) { /* si nose cargo, salimos del programa */ printf("No se pudo cargar la imagen: %s",SDL_GetError()); return -1; } /* llamamos al otro metodo para que dibuje la imagen (*img) sobre nuestra superficie buffer (*screen), en la posicion 100,100 */ dibujaImagen(screen, img, 100, 100); /* Este metodo tomara todos los cambios que se han hecho sobre la superficie buffer(*screen), y las desplegara por pantalla */ SDL_Flip(screen); SDL_Delay(5000); return 1; }
|
|
|
En línea
|
|
|
|
|
|