8Fermer10
OLLe 17/03/2014 à 21:27
Playmobil (./7) :
Merci Olivier pour la mise sur la voie, je serait preneur de l'option 1, car je veux du pur gem.... Mais ton aide qui sera certainement en C, va falloir que je la convertisse en GFA...

En tout cas je suis preneur de tout code, j'aime décortiquer les trucs farfelus ! lol

P.S : Pour MyAes, je suis justement en train de l'installer sur mon EasyMint, mais encor pas mal de configuration à faire dessus... top


Bon faut télécharger la dernière archive et la petite mise à jours (sinon ca ne marche que sur les résolutions >=24bits!) ici : http://myaes.lutece.net/telechargement/myaes.zip
Dans le dossier myaes\doc tu trouveras devdocs.txt, en bas du texte il y a les explications en anglais de appl_get_cicon() avec le binding

Dans ton cas ce qui va t'intéresser c'est d'utiliser le type 3 (tu fournis le chemin d'un PNG)

ensuite tu as un exemple en C nommé "tcicon.c"
Le principe: appl_get_cicon() renvoi un pointeur sur une structure de type CICON et les bitmaps associés (l'icone couleur et le masque), ce buffer n'est pas permanent et sera effacé au prochain appel à appl_get_cicon() donc il faut dans 1 premier temps recopier ce buffer, puis le reloger (les différents pointeurs sont relatifs au début du buffer (sauf si NULL dans ce cas c'est qu'il n'y a pas)), ensuite il faut créer l'objet G_CICON (myaes se fout d'avoir tout un tas de résolution) ou légèrement modifier un objet G_CICON présent dans ton RSC.

En relisant le code, je viens de me rendre compte que j'ai fait un raccourci gênant pour déterminer la taille du buffer à recopier, j'ai supposé que l'image est en 24 bits (ce qui est toujours le cas actuellement mais pas ce qui pourrait arriver par ailleurs)
La taille devrait plutôt se calculer ainsi:
size = ((long)*cicon_width*(long)*cicon_height*(long)cicon_data->num_planes/8L+((long)*cicon_width*(long)*cicon_height/8L));
if(cicon_data->sel_data) size = size + size; /* dans ton cas ce ne sera jamais le cas à toi de gérer si nécessaire en 2 appels */
size = size + sizeof(CICON);

ca c'est la taille du buffer à allouer et à recopier, dans mon exemple je rajoute une liste chainée pour gérer un cache mais dans ton cas pas besoin du tout.



Olivier