Afficher Une Image (en C/c++ Pspsdk)


ducseb
 Share

Messages recommandés

Salut voila encore un autre problemme comment afficher des images avec le PSPSDK

J'ai vu que sur ps2dev.org qu'il existait un prog qui convertit une image en code C

Comment utiliser et comment afficher une image sur le jolies ecran de la PSP ?

Merci

Lien vers le commentaire
Partager sur d'autres sites

'lu,

Je te recommande de télécharger le code source du LuaPlayer (par Shine) sur ps2dev.org.

Tu y trouveras un fichier "graphics.c" qui contient tout un tas de fonctions pour afficer des graphs très simplement, dont une qui prend en charge le format PNG (libpng requise)...

Exemple :

Image * png;InitGraphics();png = LoadImage("hello.png");BlitImageToScreen(0, 0, png->imageWidth, png->imageHeight, png, 0, 0);FlipScreen();

Lien vers le commentaire
Partager sur d'autres sites

merci je vait test merci

alors je vous explique je suis avec pspide donc je telecharge la lib pour pc et je prend le makefile de shine mais le probleme c'est que quand je fait make il me dit qu'il y a pas de makefile..??

PS: mon makefile

PSPSDK=$(shell psp-config --pspsdk-path)PSPDIR=$(shell psp-config --psp-prefix)TARGET_LIB = libpng.aOBJS = png.o pngerror.o pngget.o pngmem.o pngpread.o \        pngread.o pngrio.o pngrtran.o pngrutil.o pngset.o \        pngtrans.o pngwio.o pngwrite.o pngwtran.o pngwutil.oCFLAGS = -O2 -G0include $(PSPSDK)/lib/build.makinstall: $(TARGET_LIB)        @echo "Installing libpng into $(PSPDIR)"        @mkdir -p $(PSPDIR)/include $(PSPDIR)/lib        @cp png.h pngconf.h $(PSPDIR)/include        @cp libpng.a  $(PSPDIR)/lib        @echo "Done" 

sinan persone ne peut filer le libpng.a hien en megaupload merci

bon finalement c'est bon j'ai reusit a installer la lib c'etait le makefile qui etait bizare

Modifié par TheNetWarrior
Lien vers le commentaire
Partager sur d'autres sites

  • 4 weeks later...
Salut,

alors... persone pour nous donner un bout de code fonctionnel avec pspide sans inclure pg.h du hello world de nem?

merci

492252[/snapback]

Vous en êtes ou dans ce topic, car ca m'interresse, j'aimerai bien pouvoir afficher une image avec le pspsd, tout en sachant que j'utilise pspide 1.0 :)

merci d'avance pour vos reponse

Lien vers le commentaire
Partager sur d'autres sites

Exemple pour afficher une image en plein écran:

Crée votre image.bmp en 480/272 Pixels

Convertissez la en image.c avec le soft Match-one PSP Converter

Sous DOS : m1pspc image.bmp image.c

Le truc pour que l’image soit correcte sur la PSP c’est de la mettre en 32bit

Donc il faut une petite routine sur la PSP pour la mettre en 32bit autrement l’image ne garde pas les bonnes couleurs

Comme je suis gentil la routine est présente dans le code :lol:

main.c

#include <pspkernel.h>

#include "image.c"

/* Define the module info section */

PSP_MODULE_INFO("PAINTIMAGE", 0, 1, 1);

/* Define the main thread's attribute value (optional) */

PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

/* Exit callback */

int exit_callback(int arg1, int arg2, void *common)

{

  sceKernelExitGame();

  return 0;

}

/* Callback thread */

void CallbackThread(void *arg)

{

int cbid;

cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);

sceKernelRegisterExitCallback(cbid);

sceKernelSleepThreadCB();

}

/* Sets up the callback thread and returns its 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;

}

// Routine de conversion de l'image de 16bit en 32bit

unsigned int pixel_16to32(unsigned int sourceColor)

{

    unsigned int destColor;

    int r, g, b;

    b = (sourceColor&0x7C00)>>10 ;

    g = (sourceColor&0x03E0)>>5 ;

    r = (sourceColor&0x001F) ;

    destColor = ((b&0x1F)<<19)|((g&0x1F)<<11)|((r&0x1F)<<3) ;

    return destColor;

}

int main(void)

{

  int x, y;

  u32* vram = (u32*) (0x40000000 | 0x04000000);

  SetupCallbacks();

  // init graphics

  sceDisplaySetMode(0, 480, 272);

  sceDisplaySetFrameBuf((void *) vram, 512, 3, 1);

  // Affichage de l'image

  for (y = 0; y < 272; y++) {

      for (x = 0; x < 480; x++) {

        vram[x + y * 512] = pixel_16to32(image[x + y*480]);

      }

  }

  sceKernelSleepThread();

  return 0;

}

Voilà, vous copiez le main.c, le background.c et le makefile dans le même dossier et vous compilez :)

PSP_Image_plein_ecran.rar

Lien vers le commentaire
Partager sur d'autres sites

Ouai c vrai que ca marche bien pour une fois lol

c toi qui l'as ecrit ? pke bien joué mdr

Sinon est ce que tu pourrait nous faire un petit cours rapide sur la vram et les 2 fonctions display que tu as utilisé ? pkoi 512 etc... comment je fais si je vux l'afficher en 300*170 par exemple... ?

Merci d'avance, si tu veux pas le faire c pas grave j'essai de comprendre en parallele ! ;)

merci d'avance :) et excuse mes questions de debutant !

Lien vers le commentaire
Partager sur d'autres sites

Nop c pas moi qui l’ai écrit ce code

J’ai trouvé la fonction pour afficher l’image et pour la convertir en 16/32bit sur le forum de ps2dev

Je débute en C et je suis comme vous à chercher comment ça fonctionne… mais moi je trouve lol :P

Pour afficher une image en 300/170 change la code par :

  for (y = 0; y < 170; y++) {

      for (x = 0; x < 300; x++) {

        vram[x + y * 512] = pixel_16to32(image[x + y*300]);

      }

  }

L’image s’affichera en haut à gauche

Pour la changer de place je n’ai pas encore trouvé comment faire

Parce que si tu change par :

  for (y = 100; y < 170; y++) {

      for (x = 50; x < 300; x++) {

        vram[x + y * 512] = pixel_16to32(image[x + y*300]);

      }

  }

L’image est bien a 100 du haut et à 50 du coté gauche mais il y a un bug dans l’affichage

Pour tes autres questions je ne suis pas encore assez compétent pour te répondre… mais ça va venir :)

Modifié par Manu-R
Lien vers le commentaire
Partager sur d'autres sites

Lo

for (y = 100; y < 170; y++) {

      for (x = 50; x < 300; x++) {

        vram[x + y * 512] = pixel_16to32(image[x + y*300]);

      }

  }

Essaye plutot :

for (y = 100; y < 270; y++) {

      for (x = 50; x < 350; x++) {

        vram[x + y * 512] = pixel_16to32(image[x + y*300]);

      }

  }

++TheTool

Lien vers le commentaire
Partager sur d'autres sites

Bon j'arrive certe aussi a afficher l'image redimensionner a un certain endroit dans l'ecran mais par contre, l'image est effectiment toute brouillé... je sais pas si ca vient du fait que l'image est en 480*272 et que qd on l'affiche en plus petit ca merde !???

Lien vers le commentaire
Partager sur d'autres sites

  • 2 months later...

Dsl de remonter un post d'il y a 2 mois, mais je galere comme un Lama à faire fonctionner --> Match-one PSP Converter

Alors si kelkun pouvais m'eclairer SVP!

ps : Si kelkun pouvais me refiler l'EBOOT de "80Y" car le lien est dead-->>>ici>> merci bcp! <---[resolu!!]

thx;)

Modifié par seb117
Lien vers le commentaire
Partager sur d'autres sites

personnes pour repondre?!? Up

--> je l'utilise sous le Cmd avec les bonnes commandes, une image en 24 bit de taille 480/272 en .bmp, mais il me dit tjr "FILE ERROR"!!

Aurais-je fais une gaffe dans ma conversion?!?

Modifié par seb117
Lien vers le commentaire
Partager sur d'autres sites

  • 7 months later...

  for (y = 0; y < 170; y++) {	  for (x = 0; x < 300; x++) {		vram[x + y * 512] = pixel_16to32(image[x + y*300]);	  }  }

devient

  for (y = 0; y < 170; y++) {	  for (x = 0; x < 300; x++) {		vram[x + y * 512] = pixel_16to32(image[(50+x) + (100+(y*300))]);	  }  }

Lien vers le commentaire
Partager sur d'autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
 Share