Artículos :: LTK demos ::
:: Mostrando imágen BMP por pantalla ::
[Comentarios al código]
El objetivo de este código no es otro que el de presentar en pantalla una imagen con formato BMP, la cual esta alojada en la raíz de la SMC (gp:\\). Nótese que el separador de directorios es \\, así para mostrar un BMP alojado en gpmm, la ruta sería tal que así: gp:\\gpmm\\nave.bmp
Puedes descargar, tanto el código fuente como el ejetuable en el área de descargas, o bien aquí: Código fuente - Ejecutable
|
|
|
|
#include <gpstdio.h>
#include <gpstdlib.h>
#include <gpgraphic.h>
#include <gpfont.h>
#include <stdio.h>
#include <stdlib.h>
#include <SDL.h>
void GpMain(void *argv)
{
SDL_Surface *image, *screen;
SDL_Rect dest;
SDL_Event event;
int done = 0;
atexit(SDL_Quit);
// Iniciar SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("No se pudo iniciar SDL: %s\n",SDL_GetError());
exit(1);
}
// Activamos modo de video
screen=SDL_SetVideoMode(320,240,8,SDL_HWSURFACE|SDL_DOUBLEBUF);
if (screen == NULL) {
printf("No se puede inicializar el modo gr?fico: \n",SDL_GetError());
exit(1);
}
// Cargamos gr?fico
image = SDL_LoadBMP("gp:\\nave.bmp");
if ( image == NULL ) {
printf("No pude cargar gr?fico: %s\n", SDL_GetError());
exit(1);
}
// Definimos donde dibujaremos el gr?fico
// y lo copiamos a la pantalla.
dest.x = 10;
dest.y = 10;
dest.w = image->w;
dest.h = image->h;
SDL_BlitSurface(image, NULL, screen, &dest);
// Mostramos la pantalla
SDL_Flip(screen);
// liberar superficie
SDL_FreeSurface(image);
// Esperamos la pulsaci?n de una tecla para salir
while(done == 0) {
while ( SDL_PollEvent(&event) ) {
if ( event.type == SDL_KEYDOWN )
done = 1;
}
}
return 0;
} |
|
|
|
[Módificaciones]
El objetivo de este código no es otro que el de presentar en pantalla una imagen con formato BMP, la cual esta alojada en la raíz de la SMC (gp:\\). Nótese que el separador de directorios es \\, así para mostrar un BMP alojado en gpmm, la ruta sería tal que así: gp:\\gpmm\\nave.bmp
|
|
|
|
// Cargamos gráfico
image = SDL_LoadBMP("gp:\\nave.bmp");
if ( image == NULL ) {
printf("No pude cargar gráfico: %s\n", SDL_GetError());
exit(1);
} |
|
|
|
Sustituimos la anterior porción de código por la que continua.
|
|
|
|
// Cargamos gráfico
image = IMG_Load_RW(SDL_RWFromMem(&nave,7794),0);
if ( image == NULL ) {
printf("No pude cargar gráfico: %s\n", SDL_GetError());
exit(1);
} |
|
|
|
De este modo vamos a cargar el gráfico, el cual ya no está como fichero gp:\\nave.bmp sino que está incluido en el propio ejecutable.
Para incluirlo en el ejecutable además debemos añaadir #include "data.h" al inicio del archivo, siendo data.h el archivo que contiene la imágen a mostrar pero convertida a binario.
Para convertir la imagen a binario usaremos el Gp Bin Converter de Aquafish
tras la conversión debemos observar, abriendo el archivo .h que hayamos creado, cual es el nombre y el peso, para así poder indicarlo en el código, veamos el ejemplo:
Abrimos el archivo data.h con un editor y vemos que:
|
|
|
|
const unsigned char nave[7794] = |
|
|
|
De la linea anterior sale la información para hacer la sustitucion realizada anteriormente.
|
|
|
|
image = IMG_Load_RW(SDL_RWFromMem(&nave,7794),0); |
|
|
|
|
|