fondo sdl con foto

Iniciado por peterfly, 23 Septiembre 2011, 15:52 PM

0 Miembros y 2 Visitantes están viendo este tema.

peterfly

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

Quake-man

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 =)

peterfly

muchisimas gracias compañero voy a probarlo

peterfly

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;
}