Código practica - bitmaps con SDL

Dos códigos, dos simples mains, uno cargo una imagen bmp en pantalla y el otro más de lo mismo, base para todo videojuego que pueda hacer y que se honre con tal nombre. Hasta ahora no tengo nada que lleve ese nombre.
Peeero, estos códigos son imprescindibles para mi camino a recorrer. ^^


Lo único a tener en cuenta en el código es la ruta hacia la imagen que se muestra, que debe ser si o si bmp. (Según la definición del método, tampoco he probado).
main.c: Pulsa para ver/ocultar el código
#include <stdio.h>
#include <SDL/SDL.h>

//método auxiliar que uso
SDL_Surface *inicializacion();

int main(){
        //pantallas que uso
 SDL_Surface *pantalla, *imagen;
        //donde dibujaré
 SDL_Rect destino;
 
 //inicializo
 pantalla=inicializacion();
 
 if (pantalla == NULL) {
  printf("Error iniciando el entorno gráfico: %s\n", SDL_GetError());
  exit(1);
 }
 
        //cargo la imagen
 imagen = SDL_LoadBMP("images/sasuke.bmp");
 
 if(imagen==NULL){
  printf("Error al cargar la imagen: %s\n", SDL_GetError());
  exit(0);
 }
 
 // Guardamos el BMP con otro nombre
 if (SDL_SaveBMP(imagen, "images/sasuke2.bmp") == -1){
  printf("No se puede guardar la imagen\n");
 }
 
 // Inicializamos la variable de posición y tamaño de destino
 destino.x = 250;
 destino.y = 150; 
 destino.w = imagen->w;
 destino.h = imagen->h;
 
 // Copiamos la superficie creada rectángulo en la anterior pantalla
 SDL_BlitSurface(imagen, NULL, pantalla, &destino);

 // Mostramos la pantalla
 SDL_Flip(pantalla);

 // Ya podemos liberar el rectángulo, una vez copiado y mostrado
 SDL_FreeSurface(imagen);

 SDL_Delay(5000);
 exit(0);
}

SDL_Surface *inicializacion(){
 SDL_Surface *pantalla;
 if(SDL_Init(SDL_INIT_VIDEO)<0){
  printf("No se pudo iniciar SDL: %s\n", SDL_GetError());
  exit(1);
 }
 
 atexit(SDL_Quit);
 
 if(SDL_VideoModeOK(1024,768,24,SDL_SWSURFACE|SDL_DOUBLEBUF)==0){
  printf("Modo no soportado: %s\n", SDL_GetError());
  exit(1);
 }
 
 //saco la pantalla
 pantalla=SDL_SetVideoMode(1024, 768, 24, SDL_SWSURFACE|SDL_DOUBLEBUF);
 
 if (pantalla == NULL) {
  printf("Error iniciando el entorno gráfico: %s/n", SDL_GetError());
  exit(1);
 }
 
 return pantalla;
}

El otro código es el mismo main pero añadiendo el manejo del color key, siendo el magenta el que usé en mi imagen.
main.c: Pulsa para ver/ocultar el código
#include 
#include 

SDL_Surface *inicializacion();

int main(){
 SDL_Surface *pantalla, *imagen;
 SDL_Rect destino;
 
 //inicializo
 pantalla=inicializacion();
 
 if (pantalla == NULL) {
  printf("Error iniciando el entorno gráfico: %s\n", SDL_GetError());
  exit(1);
 }
 
 imagen = SDL_LoadBMP("images/sasuke.bmp");
 
 if(imagen==NULL){
  printf("Error al cargar la imagen: %s\n", SDL_GetError());
  exit(0);
 }
 
 // Inicializamos la variable de posición y tamaño de destino
 destino.x = 250;
 destino.y = 150; 
 destino.w = imagen->w;
 destino.h = imagen->h;
 
 //aplico transparencia
 Uint32 color=SDL_MapRGB(imagen->format, 255, 0, 255);
 SDL_SetColorKey(imagen, SDL_SRCCOLORKEY|SDL_RLEACCEL, color);
 
 // Copiamos la superficie creada rectángulo en la anterior pantalla
 SDL_BlitSurface(imagen, NULL, pantalla, &destino);

 // Mostramos la pantalla
 SDL_Flip(pantalla);

 // Ya podemos liberar el rectángulo, una vez copiado y mostrado
 SDL_FreeSurface(imagen);

 SDL_Delay(5000);
 exit(0);
}

SDL_Surface *inicializacion(){
 SDL_Surface *pantalla;
 if(SDL_Init(SDL_INIT_VIDEO)<0){
  printf("No se pudo iniciar SDL: %s\n", SDL_GetError());
  exit(1);
 }
 
 atexit(SDL_Quit);
 
 if(SDL_VideoModeOK(1024,768,24,SDL_HWSURFACE|SDL_DOUBLEBUF)==0){
  printf("Modo no soportado: %s\n", SDL_GetError());
  exit(1);
 }
 
 //saco la pantalla
 pantalla=SDL_SetVideoMode(1024, 768, 24, SDL_SWSURFACE|SDL_DOUBLEBUF);
 
 if (pantalla == NULL) {
  printf("Error iniciando el entorno gráfico: %s/n", SDL_GetError());
  exit(1);
 }
 
 return pantalla;
}

Etiquetas: ,,,,,. Guarda el enlace permanente.

Deja un comentario ^^