1

Je pensais qu'il y avait une fonction pour faire ça dans le sdk mais apparemment non... Il n'y aurait pas une petite librairie pour ça ? Je crois qu'on peut le faire avec SDL mais comme j'ai fait tout le reste en utilisant les fonctions du sdk, je pense que ça vaut pas le coup de l'utiliser juste pour ça, si ? (c'est pour permettre de skiner un jeu facilement)

2

-

3

En m'aidant d'exemples d'Aquafish (merci wink) j'ai fait une fonction qui ouvre un bmp (8bits) dans un tableau, ce tableau pouvant ensuite être affiché grace à GpBitBlt.

Je la poste ici, si ça peut servir à quelqu'un...

Si quelqu'un l'améliore, ce serait cool qu'il mette sa nouvelle version smile
/* ptr pointe vers le tableau qui "recevra" l'image */ void load_bmp8b(char filename[256], unsigned char *ptr, int width, int height) { long k2; ulong k; int fi; int x,y; char buffer[300]; unsigned char temp[width*height];      if (GpFileOpen(filename, OPEN_R, &fi) == SM_OK)      {      GpFileSeek(fi, FROM_BEGIN, 1078, &k2);      GpFileRead(fi, &temp, width*height, &k);      GpFileClose(fi);           for (y=0;y<height;y++)                for (x=0;x<width;x++)                *(ptr+x*height+y)=temp[y*width+x];      }      else      {      GpRectFill (NULL, &gpDraw[nflip], 0, 0, 320, 240, 0xFF);      sprintf(buffer,"Chargement de %s impossible !", filename);      GpTextOut(NULL, &gpDraw[nflip], 16, 64, buffer, 0x55);      GpSurfaceFlip(&gpDraw[nflip++]);      nflip &= 0x01;      while(1);      } }

4

Merci beaucoup, je vais tester sa de suite. wink

5

Bon j'aimerais bien afficher une image bmp 16bits mais j'y arrive pas.


Mon code est la :
#include "gpdef.h" #include "gpstdlib.h" #include "gpgraphic.h" #include "gpmain.h" #include "gpfont.h" #include "gpmm.h" GPDRAWSURFACE gpDraw[2]; int nflip = 1; uchar bitmap[320*240]; char load_bmp(char file_name[256], unsigned char * ptr); void GpMain(void *arg) { unsigned int i; for(i = 0; i < 2; ++i) GpLcdSurfaceGet(&gpDraw[i], i); GpSurfaceSet(&gpDraw[0]); GpFatInit(); load_bmp("gp:\gpmm\pic.bmp", bitmap);  for(;;) {  GpBitBlt16(NULL, &gpDraw[nflip], 0, 0, 320, 240, (uchar *)bitmap, 0, 0, 320, 240);    GpSurfaceFlip(&gpDraw[nflip++]);  nflip &= 0x01;   } } char load_bmp(char file_name[256], unsigned char * ptr) {  int heigh=240; int width=320;  F_HANDLE img;  long k2;  ulong k;  int x, y;  unsigned char temp[320*240];    if(GpFileOpen(file_name, OPEN_R, &img) == SM_OK)  {   GpFileSeek(img, FROM_BEGIN, 54, &k2); // 54 = 16 bits   GpFileRead(img, &temp, width*heigh, &k);   GpFileClose(img);   for(y=0; y<heigh; y++)    for(x=0; x<width; x++)     *(ptr+x*heigh+y)=temp[y*width+x];   return 1;  }  else return 0; }

ça me donne ça :

00000000.jpg

6

bon j'ai rajouté GpGraphicModeSet(16, NULL); bien sûr.. ( oublié dans le code ^^ )

7

tu peut récupérer le signal vidéo de ta gp ou alors c'est une simple photo falken?

8

c un screen de geepee32

9

falken, des bmp 16 bits ca existe pas, donc y faut pas oublier de convertir ton image (24 bpp je pense) en 16 bits avant de l'afficher...
j'ai pas mon code sous la main, mais si ayonama passe, il a qu'a te filer le code que jlui avait envoyé pour charger des bmps 24 bits...

10

Je voulais le tester, l'englober dans une fonction et ajouter la recherche des dimensions dans l'header mais je viens de voir que j'ai pas les libs 16bits dans le devkitadv modifié :\

Voilà le code qu'Aquafish m'avait envoyé :
int rvb(unsigned char r, unsigned char v, unsigned char b, unsigned char it) /* r, v, b : 0..31; it : intensité : 0 ou 1; 1 de préférence */ { return ( ( (r) <<11) | ( (v) <<6) | ( (b) <<1) | it ); } unsigned char bmp[320*240*3]; if (GpFileOpen("gp:\boot.bmp", OPEN_R, &fi) == SM_OK) { GpFileSeek(fi, FROM_BEGIN, 54, &k2); GpFileRead(fi, &bmp, 76800*3, &k); GpFileClose(fi);      for (x = 0; x < 320; x++)      {           for (y = 0; y < 240; y++)           {           GpPointSet16(&gpdraw, x, 240 - y, rvb((bmp[(x+(y*320))*3 + 2]/8), (bmp[(x+(y*320))*3 + 1]/8), (bmp[(x+(y*320))*3]/8), 1));           }                            } }

On peut télécharger la librairie 16bits quelque part ?

11

bin elle est incluse avec le sdk non?

12

ah non, je crois quelle marchent que avec le sdt... sdt a telecharger ici :
http://procvor.free.fr/arm_sdt_2.51.rar
http://procvor.free.fr/config.rar

13

-

14

ouais ok orion alors j'ai mis u16 et c'est pareil.. si tu veux améliorer mon code tu es le bienvenu ! smile

15

ça serait vraiment chouette smile

16

Bon j'ai adapté le code.. mais bon maintenant ça bug.. mais la compilation est parfaite..
#include "gpdef.h" #include "gpstdlib.h" #include "gpgraphic.h" #include "gpmain.h" #include "gpfont.h" #include "gpmm.h" #include "gpmodplay.h" #include "gpstream.h" #include "background.h" //image background.bmp converti avec Gp32Converter #include "sprite.h" //image sprite.bmp converti avec Gp32Converter GPDRAWSURFACE gpDraw[2]; int nflip = 1; unsigned char bitmap[320*240*3]; void GpMain(void *arg) {                 unsigned int i;      for(i = 0 ; i < 2 ; ++i) GpLcdSurfaceGet(&gpDraw[i], i);      GpSurfaceSet(&gpDraw[0]);      GpFatInit();      GpGraphicModeSet(16, NULL);            charger_bmp("gp:\gpmm\image.bmp", bitmap);             for(;;)      {           //GpBitBlt16(NULL, &gpDraw[nflip], 0, 0, 320, 240, (unsigned char *)bitmap, 0, 0, 320, 240);           GpSurfaceFlip(&gpDraw[nflip++]);           nflip &= 0x01;                 } } int rvb(unsigned char r, unsigned char v, unsigned char b, unsigned char it) /* r, v, b : 0..31; it : intensité : 0 ou 1; 1 de préférence */ {      return ( ( (r) <<11) | ( (v) <<6) | ( (b) <<1) | it ); } char charger_bmp(char nom_fichier[256], unsigned char * ptr) {            F_HANDLE img;       long k2;       ulong k;       int x, y;       unsigned char bmp[320*240*3];             if (GpFileOpen(nom_fichier, OPEN_R, &img) == SM_OK)      {      GpFileSeek(img, FROM_BEGIN, 54, &k2);      GpFileRead(img, &bmp, 76800*3, &k);      GpFileClose(img);           for (x = 0; x < 320; x++)           {                for (y = 0; y < 240; y++)                {                GpPointSet16(&gpDraw[nflip], x, 240 - y, rvb((bmp[(x+(y*320))*3 + 2]/8), (bmp[(x+(y*320))*3 + 1]/8), (bmp[(x+(y*320))*3]/8), 1));                }                                 }           return 1;      }       else return 0;  }  

17

pkoi tu fait *3 + 2 ?

remplace unsigned char bitmap[320*240*3];
par ushort bitmap[320*240] ;

et fait >>3 au lieu du /8 ^^

18

ouais mais tout ça revient au même ! le truc c 'est que j'aimerais bien voir une image 24bits s'afficher.. c tout.

19

et ptet les data commence pas a 54 ^^
l'offset vers les data se trouve ds un int, a partir du 11 octet du fichier

20

si ça commence à 54 quand c du 24bits...

21

arf ui 24 bit tongue
bah je c pas alors dsl grin

22

heu ouais mais y'a personne qui sait ?

personne n'a un bout de code complet avec GPMAIN un truc qui marche tout seul koi...
c'est fou ça !

23

> ouais mais tout ça revient au même !

non carement pas ^^
tu utilise un tableau donc sa reviens pas au meme ^^
ds ton code tu charge les données par l'adresse du tableau donc ca va, mais apres tu pioche dedans pour ta fonction rgb,
et ta defini un tableau de char donc il prendra 8 octet au lieu de 24 pour creer la couleur ^^

24

tu veux pas mettre à jour mon code stp ? smile

la je débute sur les bmps ^^

25

euh dsl j'avais mal lu ton code, ce que tu fait est bon (je viens de comprendre le pkoi du *3+2 tongue)

26

-

27

bah c'est de aqua mais bon.. enfin moi je pige pas pkoi ça marche pas smile

28

Orion plutot que de poser des questions ? tu veux pas aider ? à quoi ça sert ces questions à part étaler ta science ?

Vas y explique moi tout ptit genie !

29

essai d'inverser le codage de la couleur
sur les bmp 8 bit, la palette est codé en bgr ptet la c pareil tongue

30

mais c'est pris en compte la non ?