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)
bon j'ai rajouté GpGraphicModeSet(16, NULL); bien sûr.. ( oublié dans le code ^^ )
tu peut récupérer le signal vidéo de ta gp ou alors c'est une simple photo falken?
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...
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 ?
bin elle est incluse avec le sdk non?
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;
}
pkoi tu fait *3 + 2 ?
remplace unsigned char bitmap[320*240*3];
par ushort bitmap[320*240] ;
et fait >>3 au lieu du /8 ^^
et la le mec il le pécho par le bras et il lui dit '
ouais mais tout ça revient au même ! le truc c 'est que j'aimerais bien voir une image 24bits s'afficher.. c tout.
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
et la le mec il le pécho par le bras et il lui dit '
si ça commence à 54 quand c du 24bits...
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 !
> 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 ^^
et la le mec il le pécho par le bras et il lui dit '
falken80 Le 18/07/2004 à 18:46Edité par falken80 le 18/07/2004 à 18:47 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 !
mais c'est pris en compte la non ?