En esta entrega vamos a usar un recurso muy importante para cualquier programador que se precie: la impresión de imagenes. Para ello usaremos la librería "graphics.h", que estará disponible para su descarga en esta misma entrega, al final de este tutorial, en la sección "Descarga". Espero que estos tutos os estén sirviendo de ayuda para vuestro aprendizaje en el interesante lenguaje del C.
Autor: sting18.
Vamos a imprimir una imagen. Para ello, hay que tener en cuenta que las dimensiones de la pantalla de la PSP son de 480x272.
Empezamos con las librerías necesarias. (Descargar graphics.h al final).
#include <pspkernel.h> #include <pspdebug.h> #include "graphics.h"
Si sois curiosos, os preguntaréis por que razón viene la librería graphics.h entre comillas, y no como las anteriores. Esto es porque esta librería es externa al kit de programación de la primera entrega, así que debemos descargarla y ponerla junto a main.c y makefile. Podemos asignarle una carpeta si asi los queremos, por ejemplo: "librerias/graphics.h".
Continuamos con lo de siempre:
PSP_MODULE_INFO("Imprimir imagen", 0, 1, 0); PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER);
int exit_callback(int arg1, int arg2, void *common) { sceKernelExitGame(); return 0; } /* Llamada thread */ int CallbackThread(SceSize args, void *argp) { int cbid; cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL); sceKernelRegisterExitCallback(cbid); sceKernelSleepThreadCB(); return 0; } /* Configura llamada thread y vuelve a su thread id */ int SetupCallbacks(void) { int thid = 0; thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0); if(thid >= 0) { sceKernelStartThread(thid, 0, 0); } return thid; }
Para poder usar una imagen debemos antes asignarla. Esto se hace así:
Image* imagen
Comenzamos nuestra función principal.
int main() {
Ahora iniciamos el "modo gráfico" de nuestra PSP mediante este código:
initGraphics();
E iniciamos la salida del HOME.
SetupCallbacks();
Ahora cargamos la imagen que debe encontrarse al lado de nuestro EBOOT.PBP de este modo:
imagen = loadImage("imagen.png");
La imagen puede estar en cualquier lugar, solo que tenemos que indicar el lugar correcto. Por ejemplo: tenemos la imagen en la carpeta imagenes, pues la indicaremos así:
//Codigo de ejemplo. No hay que usarlo. imagen = loadImage("imagenes/imagen.png");
Ahora llega el codigo que más estabas esperando: el codigo para IMPRIMIR esa imagen. Es el siguiente:
blitAlphaImageToScreen(0 ,0 ,480 , 272, imagen, 0, 0);
Voy a hacer una descripción de los parametros que tiene esta función:
Ahora vamos a usar la función esencial para que se muestre lo que se ha mandado a imprimir.
flipScreen();
Con este codigo se "da la vuelta" a la pantalla y muestra lo que habíamos mandado a imprimir con la función anterior.
Ahora debemos liberar la/las imagen/es que ya no necesitamos para que la RAM no se llene demasiado y provoque que la PSP se cuelgue/congele.
freeImage(imagen);
Cerramos nuestro main y listo.
return 0; }
Ya esta listo, solo nos queda crear nuestro Makefile.
TARGET = imagenes OBJS = main.o graphics.o framebuffer.o CFLAGS = -O2 -G0 -Wall CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti ASFLAGS = $(CFLAGS) LIBDIR = #Aqui incluiremos libs necesarias LIBS = -lpspgu -lpng -lz -lm LDFLAGS = EXTRA_TARGETS = EBOOT.PBP PSP_EBOOT_TITLE = Iniciandome en graficos PSPSDK=$(shell psp-config --pspsdk-path) include $(PSPSDK)/lib/build.mak
¿Por qué ponemos OBJS? Para que el Makefile LEA las librerías necesarias. Más adelante entenderás para que sirve esto, ahora no tiene gran importancia que te rompas el coco intentando entenderlo, solo añadelo a tu code.
Ahora solo queda probarlo.
Espero que os halla sido util esta entrega y la estudieis bien. ¡Hasta la proxima entrega!
Descargar Archivos Necesarios (Sólo Usuarios Registrados).
Comentarios
Tengo un problema que es que
Tengo un problema que es que la imagen se me va repitiendo muchas veces y no se que hacer aqui el code
.
Todo me funciona a la perfeccion pero me repatea que al salir con el Home se me crashee la PSP (se queda en espere,por favor) ¿ alguien sabe porque ?
PD: Tambien me pasa con el testeador
PD2: PSP 2000 6.39 ME-9.7
-> Creaciones <-
Os invito a probar el lol xD
http://signup.leagueoflegends.com/?ref=50814a20894be236637679
como...........?
como se podria poner 2 imagenes? (si pongo una imagen pulso X o cualquier tecla y que salga otra)
Solo pon que al pulsar X
Solo pon que al pulsar X mustre otra imagen y la imagen ponla despues de como muestras la otra, o la podrias poner en un avariable boleana(verdadero,falso) y pones que al presionar el boton cambie de estado,
PD: no te pongo codigo ya que en esta entrega ya deves mas o menos saber como hacer lo que te digo ya que ya estan las pulsaciones y mostrar imagen que es todo lo que nesecitas (es por tu bien :D) de todos modos si tienes problemas no dudes en poner tu problemas saludos.
Gracias.//
Me sirbio...
no me compila
no compila yo creo que esta todo bien:
y el makefile
Canal de Youtube De "Trabajo": http://www.youtube.com/user/DiegoDark256
Canal de Youtube para divertirse ;D :http://www.youtube.com/user/Trollsofthelife
Twitter Personal: https://twitter.com/DiegoDark256
Twitter del Canal: https://twitter.com/TrollsOfTheLife
[RESUELTO] era el main
en la parte de:
era (remarco el error por si os pasa) :
Canal de Youtube De "Trabajo": http://www.youtube.com/user/DiegoDark256
Canal de Youtube para divertirse ;D :http://www.youtube.com/user/Trollsofthelife
Twitter Personal: https://twitter.com/DiegoDark256
Twitter del Canal: https://twitter.com/TrollsOfTheLife
al compilarlo me da error
oie disculpa me podrias pasar tus archivos que creaste para hacer que imprima una imagen, porque copie el makefile y el del codigo C y aun asi no me deja de dar error, los copie tal cual como los escribiste, espero y me puedas ayudar o.O
me podrian decir
como se meteria una imagen asi entre un texto (explicacion: por ejemplo yo pongo "XD" le doy a la X sale otra pantalla con la "imgen" le buelbo a dar a la x y pone por ejemplo "LOL") como seria?
Canal de Youtube De "Trabajo": http://www.youtube.com/user/DiegoDark256
Canal de Youtube para divertirse ;D :http://www.youtube.com/user/Trollsofthelife
Twitter Personal: https://twitter.com/DiegoDark256
Twitter del Canal: https://twitter.com/TrollsOfTheLife
LOL
Con lo dificil que se hace en NDS y lo facil que es aqui, lastima que no sepa instalar PSPDev.
Pues no es dificil dioni solo
Pues no es dificil dioni solo es cuestion de pasiencia, y seguir todo al pie de la letra y listo :D.
Si, pero
yo ya tengo instalado el devkitpro, solo para NDS, con lo cual al instalar el PSPDev no se cual sera la reaccion del ordenador. Fijate que batalle mucho con el ordenador para poder poner el devkitpro, la primera vez que lo instale el teclado no iba!