# Inclure une image à mon projet SDL



## JoJoS (30 Novembre 2006)

Bonjour à tous !!

Bon bin j'ai encore un problème avec XCode et la SDL.
Je voudrais faire afficher une image dans mon application SDL mais je n'y arrive pas.

Le problème ne vient pas de savoir comment faire, mais plutôt, comment accéder à mon image. Je ne sais pas quel chemin mène à l'image...

dans mon code je met 

```
IMG_Load("mon_image");
```
et naturellement ca me la trouve pas...

Alors j'ai essayer de la mettre au niveau des sources, au niveau de l'executable, mais je n'y arrive pas...

Merci de votre aide !!


----------



## p4bl0 (30 Novembre 2006)

JoJoS a dit:


> Bonjour à tous !!
> 
> Bon bin j'ai encore un problème avec XCode et la SDL.
> Je voudrais faire afficher une image dans mon application SDL mais je n'y arrive pas.
> ...


as tu mis les images dans le m&#234;me r&#233;pertoire que le .app ??


----------



## JoJoS (30 Novembre 2006)

Ouais... J'ai d&#233;j&#224; test&#233;
mais impossible...


----------



## ntx (30 Novembre 2006)

La réponse est sur le forum de MacBidouille. :rateau:


----------



## JoJoS (1 Décembre 2006)

Bin ca ne m'aide pas plus que ca...


----------



## ntx (1 Décembre 2006)

Tu as fait une recherche sur leur forum ?


----------



## tatouille (3 Décembre 2006)

load image heum

j'ai rien test&#233; ni lu mais j'utilise mon cerveau ::rateau:

ca ne fonctionne pas parce qu'il ne la trouve pas
quand je start une appli mon dossier courant sur la console est /
ou si je start depuis un tty mon home non ?:rateau:  ( connaissance basique de ton environnement de dev
bien sur tu as pr&#233;alablement lu la doc de ta cible ... )

donc j'imagine qu' avec un CFBundleCopyResourceURL();
puis un CFURLCopyFileSystemPath();  
(ps CFUrl to char * fullpath j'imagine que load_img prend un char* en argument)

ps tu peux aller aussi taper directement dans  myURL->thepath (c'est une struct ) ...

file://the/path ...

on devrait avoir quelque chose du genre IMG_load("fullpath/app.app/Contents/Resources/mon.img") 

non ? 
enfin c'est comme &#231;a que la doc d'apple CFBundle explique le bignou :rateau:

ou encore une autre approche comme je l'explique ici

pub/Projects/rtool/rtool-12.1/samples/ShareToResources.c 

c'est marrant de gueuler en voulant cr&#233;er des CFBundle sans lire la doc du CoreFoundation ? 

remarque t'aurais eu le meme probleme sur n'importe quel  OS ...
les neurones ca ne d&#233;pends pas de &#231;a heureusement et les newbs
&#233;viter d'utiliser cet icon 
	

	
	
		
		

		
			





 parce que  ca m'&#233;nerve encore plus

et dans notre cas si c'est une mainBundle app quelque chose du genre

```
if( 
(ResourcesPath = CFStringCreateWithFormat(
                         kCFAllocatorDefault,
                         NULL,
                         CFSTR("&#37;@/Contents/Resources"),
                         theBundlePath)
) 
)
{
  return CFStringToCString(ResourcesPath);
}
```
je ne rentre pas dans l'avantage de la premi&#232;re m&#233;thode &#224; propos de la localization ...
car la documentation d'un os c'est fait pour les crapaux baveux et tous ceux qui se font chier &#224; l'&#233;crire
ou a &#233;crire des milliards de samples codes sur le sujet sont des d&#233;biles mentaux qui perdent leur temps ...
puisqu'il y a toujours des ind&#233;crotables "f&#233;gnasses" ...


----------



## JoJoS (4 Décembre 2006)

Ca fait hyper plaisir de voir la facon dont on se fait r&#233;pondre !!!

Entre un "regarde sur les forums de macbidouille" et un "c'est marrant de gueuler en voulant cr&#233;er des CFBundle sans lire la doc du CoreFoundation" !!

Je n'utilise pas de CFBundle, je ne sais pas comment ca marche. Je veux juste programmer en C mon application SDL!

Bref, je vais voir ailleurs pour l'aide.

Merci quand m&#234;me et surtout &#224; p4bl0 pour avoir r&#233;pondu le plus proche de ce que je demandais.


----------



## DualG4 (4 Décembre 2006)

J'ai eu un souci similaire avec un fichier data.

La solution que j'ai choisi c'est:
IMG_Load("MonApp.app/Contents/Resources/monimage");

Sinon, je te trouve un peu dur avec tatouille car il essaie de te faire avancer....


----------



## ntx (4 Décembre 2006)

JoJoS a dit:


> Entre un "regarde sur les forums de macbidouille" et un "c'est marrant de gueuler en voulant créer des CFBundle sans lire la doc du CoreFoundation" !!


Tu ne veux pas aussi qu'on fasse le code à ta place !  La solution est chez MacBidouille, je ne suis pas là pour recopier ce qui a déjà été dit ailleurs. Si tu as la flemme d'aller voir là bas et bien d....... toi tout seul. :mouais:


----------



## JoJoS (4 Décembre 2006)

Merci DualG4, je vais tester ca ce soir!! Mais c'est bizare quand m&#234;me, dans XCode, quand on ajoute une image, il nous demande si l'on veut un path relatif, absolue, suivant le projet, etc... Mais ca ne change rien...

D&#233;sol&#233; si je suis "dur", mais c'est assez frustrant de demander de l'aide et de se faire traiter de feignasse! Et sur le coup, je me trouve moins dur que lui! Je d&#233;bute en C et surtout en d&#233;veloppement mac, que je trouve d'ailleur plus compliquer que sous Windaube (mais plus interressant).
Et pourtant je l'ai bouffer le guide XCode, mais quand on trouve pas, un petit coup de pouce ca fait plaisir.

Pour le forum de macbidouille, il faut s'inscrire pour faire une recherche. Sinon j'ai essay&#233; de parcourir les pages 1 &#224; 1 mais j'ai pas trouv&#233; de titre interressant.


----------



## ntx (4 Décembre 2006)

JoJoS a dit:


> Pour le forum de macbidouille, il faut s'inscrire pour faire une recherche. Sinon j'ai essayé de parcourir les pages 1 à 1 mais j'ai pas trouvé de titre interressant.


Il fallait retourner jusqu'au mois de juin 2006. La conclusion est la même que celle de DualG4 avec quelques combines en plus.


----------



## JoJoS (4 Décembre 2006)

Oki cool merci !!! Je vais voir ca ce soir en rentrant !!


----------



## p4bl0 (4 Décembre 2006)

Je viens de tester et &#231;a marche tr&#232;s bien :

IMG_Load("Image.bmp");

en mettant l'image Image.bmp dans lememe dossier que le .app et bien &#231;a marche !


----------



## JoJoS (5 Décembre 2006)

Ca me soul, ca ne marche pas... Je dois me tromper autre part...
Du coup j'ai tout supprimer. Je recommencerai tout quand j'aurai plus de temps. Mais qu'est ce que c'est p&#233;nible !!!!


----------



## JoJoS (5 Décembre 2006)

Ha c'est bon, ca a enfin fonctionn&#233; !!! Merci de votre aide !!

J'ai tout d'abord refait un projet, puis pour les chemins j'ai suivi les conseils du lien donn&#233; par ntx. _nomAppli.app/Contents/Resources/nomImage.extension_.

Encore merci, je vias pouvoir dormir l'esprit tranquil !!!

ps: d&#233;sol&#233; de m'&#234;tre emport&#233; !


----------



## tatouille (6 Décembre 2006)

JoJoS a dit:


> Ha c'est bon, ca a enfin fonctionn&#233; !!! Merci de votre aide !!
> 
> J'ai tout d'abord refait un projet, puis pour les chemins j'ai suivi les conseils du lien donn&#233; par ntx. _nomAppli.app/Contents/Resources/nomImage.extension_.
> 
> ...



et ha par ca gros gogole tu n' utilises pas un cfbundle == package


_nomAppli.app/Contents/Resources/nomImage.extension_.

:rateau:


----------



## JoJoS (6 Décembre 2006)

Bin j'ai pas l'impression non.
J'utilise juste le chemin en dur &#224; l'interieur de l'application.

J'ai regarder la doc de CFBundle et c'est vrai que ca pourrait &#234;tre bien mieu, mais je ne comprends pas vraiment comment l'utiliser. Alors pour le moment je laisse de cot&#233;.


----------



## ntx (6 Décembre 2006)

JoJoS a dit:


> Bin j'ai pas l'impression non.
> J'utilise juste le chemin en dur à l'interieur de l'application.


Ce que tu appelles l' "application", ton .app, est un "bundle". Donc par les méthodes de CFBundle tu peux obtenir des infos et travailler sur ton bundle.


----------



## tatouille (6 Décembre 2006)

autre approche concernant les binaires mach-o
oui je developpe une appli en C sous osx un minimum 
c'est de s'interresser au bidule de meme &#224; ELF sous un Linux
et comment fonctionne son linker 


```
int main(int argc, const char * argv[])
{
  getNSGetExecutablePath((char *)argv[0]);

  return 0;
}

int getNSGetExecutablePath(char *pname)
{
    int status = -1;
     uint32_t pathsize;
    int result;
    char *given_path = malloc(MAXPATHLEN * 2);
    if (!given_path) return status;

    pathsize = MAXPATHLEN * 2;
    result = _NSGetExecutablePath(given_path, &pathsize);
    
    if (result == 0)
    {
        printf("-- getNSGetExecutablePath &#37;s : %s --\n\n",pname,given_path);
        status = 0;
   }
   free (given_path);
   return status;
}

******darwin libdyld************************************** 
int
_NSGetExecutablePath(
char *buf,
unsigned long *bufsize)
{
    static int (*p)(char *buf, unsigned long *bufsize) = NULL;

    if(p == NULL)
        _dyld_func_lookup("__dyld__NSGetExecutablePath",
                  (unsigned long *)&p);
    return(p(buf, bufsize));
}
```
NSModule(3)
NSModule - programmatic interface for working with modules and symbols
These  routines are the programmatic interface for working with modules
and symbols in a program.  A program is composed of a set of images, an
executable,  plugins,  and dynamic shared libraries.  An image which is
an executable or a plugin is composed of one module containing  a  col-collection
lection  of  symbols.
5 minutes sur le site de L'ADC 

http://developer.apple.com/documentation/Darwin/Reference/Manpages/man3/NSModule.3.html
http://developer.apple.com/documentation/Darwin/Reference/Manpages/man3/dyld.3.html

http://developer.apple.com/documentation/CoreFoundation/index.html
http://developer.apple.com/document...eference/CFBundleRef/Reference/reference.html
http://developer.apple.com/documentation/CoreFoundation/Conceptual/CFBundles/Tasks/locating.html
http://developer.apple.com/document...ceptual/CFBundles/Concepts/BundleAnatomy.html

voila c'est du C c'est super Basique 6 jours de rien contre 5 minutes ds la documentation Apple ...


----------

