Annonces Google
Serveur IRC
Serveur : irc.portlane.se
Canal : #AmigaNG
Activité du Site

Pages vues depuis 25/07/2007 : 33 730 172

  • Nb. de membres 193
  • Nb. d'articles 1 329
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  Création-Développement »» Intégration de sprites et décors dans executable OS 4.1 ?

Intégration de sprites et décors dans executable OS 4.1 ?

3 Modérateur(s)
K-LElwoodcorto
Pierro787 Pierro787icon_post
Pour ceux que ça pourrait intéresser, après divers tests:

GIMP génère en fait des fichiers RAW non compressés qui augmentent considérablement la taille des fichiers compilés.

La solution que j'ai trouvée et qui marche bien est d'utiliser l'éditeur hexadécimal libre hxd (sous Windows) qui génère du code c ou c# ou pascal depuis n'importe quel binaire. Celui-ci intégré en fichier en tête .h n'augmente la taille de l'éxécutable que de la taille du fichier original compressé, donc, c'est tip top.

Par contre, cela nécessite d'avoir les bonnes bliothèques installées pour la décompression mais comme je compte utiliser du PNG, ça ne devrait pas être trop compliqué.

Pierre
Vive l'Amiga !
Pierro787 Pierro787icon_post
Merci Thellier pour le code, je vais regarder ça en détail tout à l'heure.

En attendant, j'ai constaté que GIMP 2.8 avait deux possibilités de conversion d'images en code .c et en en tête .h. Ci joint le début d'une conversion d'un gif en .h, il semble que le soft génère une sortie optimisée mais un gif 256 couleurs de 19 Ko génère quand même un en tête .h de 569 ko !

Vous en pensez quoi ?



/* GIMP header image file format (INDEXED): F:\Temp\badniks.h */

static unsigned int width = 500;
static unsigned int height = 500;

/* Call this macro repeatedly. After each use, the pixel data can be extracted */

#define HEADER_PIXEL(data,pixel) {\
pixel[0] = header_data_cmap[(unsigned char)data[0]][0]; \
pixel[1] = header_data_cmap[(unsigned char)data[0]][1]; \
pixel[2] = header_data_cmap[(unsigned char)data[0]][2]; \
data ++; }

static char header_data_cmap[256][3] = {
{ 0, 0, 0},
{ 0, 0,128},
{ 64, 0, 0},
{128, 0, 0},
{ 32, 32,128},
etc...
etc...

Merci par avance pour vos infos,

Pierre
Vive l'Amiga !
thellier thelliericon_post
Ou celui ci
http://www.os4depot.net/index.php?function=showfile&file=development/utility/bindata.lha

mais qui est tellement simple que j'en recopie le source ici

#nclude /string.h>
#nclude /ctype.h>
#nclude /stdio.h>

#define CHAR_COLS 14

int main(int argc, char *argv[])
{
int n;

if(argc<2)
{
fprintf(stderr,"bindata img1 [img2 ...]\n");
return(1);
}

for(n=1; n {
unsigned char c;
FILE *fp;
int m;
char namein[256],*ptr;

strcpy(namein,argv[n]);
ptr=strrchr(namein,'.');
if(ptr!=NULL) ptr[0]='\0';

for(m=0; namein[m]!='\0'; m++)
{
if(!isalnum(namein[m])) namein[m]='_';
}

fp=fopen(argv[n],"rb");
if(fp==NULL)
{
fprintf(stderr,"Couldn't open %s\n",argv[n]);
continue;
}

printf("const unsigned char %s[]={",namein);

m=0;
while(fread(&c,1,1,fp)>0)
{
if(m!=0) printf(",");
if((m%CHAR_COLS)==0) printf("\n\t");
printf("0x%02x",c);
m++;
}
printf("\n\t};\n");
printf("const unsigned int %s_length=%d;\n",namein,m);
fclose(fp);
}

return(0);
}
Message édité par : thellier / 28-05-2013 14:57
AmiDARK AmiDARKicon_post
http://neshla.sourceforge.net/preprocessor/files.html

#incbin "Fichier"
Ils parlent de C mais je ne suis pas sûr que ce soit compatible avec tous les compilateur C...



Message édité par : AmiDARK / 27-05-2013 21:01
Elwood Elwoodicon_post
genre celui-ci on dirait : http://aminet.net/package/dev/c/ConvertBS
--
Philippe Ferrucci
Avec une Sam460 et AmigaOS 4.1, je suis eco-responsable. Cool !
thellier thelliericon_post
Hello

T'as plein d'utilitaire sur Aminet pour convertir un fichier quelconque binaire (un .jpg par exemple) en source C : cad un listing .h avec série de constantes numériques séparées par des virgules.
Y a plus qu'a l'inclure et compiler
genre
#!include! "monlogojpg.h"
Ainsi tu as ton image DANS ton binaire

Après à l'éxécution le problème c de charger ce .jpg depuis la zone mémoire où est chargée ton prog, je crois que la libjpeg sait + ou - le faire...
Sinon tu peut dumper dans RAM: ces données .jpg , donc sous forme de vrai fichier .jpg temporaire, et les recharger comme un .jpg classique avec libjpeg ou les datatypes

Alain
Pierro787 Pierro787icon_post
Amidark, ce sera exactement ce qu'il me faut. Mais en attendant que tu puisses reprendre ton projet, en C/C++, sais tu comment faire ?

Intégrer la planche via un tableau (array) en code c ? (Gimp permet par exemple de générer du code c depuis une image)

Pierro
Vive l'Amiga !
Pierro787 Pierro787icon_post
C'est exactement ça Amidark, en particulier si l'usage de certains sprites ne sont autorisés que pour ce projet spécifique. Je ne cherche pas à rendre le soft blindé, ce n'est pas le but mais la planche de sprite qui se balade librement, c'est quand même problématique dans certains cas de droits d'auteur.

Comment intégrer la planche de sprites et les décors dans l'executable ?

Merci en tout cas pour vos informations

Pierro
Vive l'Amiga !
AmiDARK AmiDARKicon_post
Elwood, mettre les fichiers à l'intérieur permet une meilleure protection des données de jeu ;)
Dans l'AmiDARK Engine il sera (via un plugin) possible de créer des packs de fichiers (un gros fichier contenant plusieurs fichiers) :p


Message édité par : AmiDARK / 27-05-2013 19:54
sinisrus sinisrusicon_post
oui le visu externe est la solution la plus courante et facile pour n'importe quel projet
--
Coin coin... amitheme.amiga-ng.org
Sam460 1,15Ghz - OS4.1FE - Radeon RX550 - 2Go de ram
Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme