Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Ouvrir une image avec BFile
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Ouvrir une image avec BFile

Posté le 19/06/2014 16:51

Bonjour à tous.
M'étant lancé dans mon premier add-in sur G85, je me retrouve devant un problème : Je ne sais pas comment faire pour ouvrir et afficher une image enregistrée dans une Pict (je parle bien d'ouvrir l'image dans un add-in )
Ayant parcouru la documentation, j'ai compris qu'il faut utiliser la fonction BFileOpenMainMemory, mais avec quel nom de fichier ?
Et ensuite, que faire pour afficher cette image ? (je suppose qu'elles sont codées comme les sprites, non ?)
Merci d'avance pour vos réponses


Lephenixnoir En ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 19/06/2014 17:58 | #


On ne lit jamais des images comme ça en C. Tu veux vraiment lire la Picture ou juste afficher une image ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 19/06/2014 17:59 | #


J'aimerais pouvoir lire la picture, l'afficher, la modifier et l'enregistrer (en d'autre terme faire un paint qui pourrait servir à des jeux en basic)
Lephenixnoir En ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 19/06/2014 18:00 | #


Alors lis la doc de fxlib. Tu y trouveras de quoi ouvrir un fichier de la mémoire principale (Bfile_OpenMainMemory()), et de quoi le modifier (il faut le supprimer d'abord).
Pour l'édition, c'est indépendant.
Le seul problème reste le header de 20 octets.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 19/06/2014 18:02 | #


Oui, j'ai vu qu'il y avait la fonction OpenMainMemory (je l'ai déjà marqué dans le post du topic ) mais je ne sais pas quel nom utilisé pour ouvrir l'image. Après, je me débrouillerai bien pour gérer le header
Lephenixnoir En ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 19/06/2014 18:03 | #


Et bien...
Bfile_OpenMainMemory("PICTURE\\PICTURE1");

Par exemple. Je ne suis plus sûr du chemin exact, mais comme d'habitude ça doit être marqué quelque part dans la doc.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 19/06/2014 18:06 | #


Lephenixnoir a écrit :
Et bien...
Bfile_OpenMainMemory("PICTURE\\PICTURE1");

Comme d'habitude ça doit être marqué quelque part dans la doc.

Ok. Merci. Je vais essayer ça de suite.
Je te jure que j'ai cherché
Lephenixnoir En ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 19/06/2014 18:08 | #


Il y a un moment où il faut apprendre à lire.
La documentation a écrit :
You do not need to specify the folder.

Donc :
Bfile_OpenMainMemory("PICTURE1");

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 19/06/2014 18:10 | #


Lephenixnoir a écrit :
Il y a un moment où il faut apprendre à lire.
La documentation a écrit :
You do not need to specify the folder.


Oui, ça je l'ai lu, mais je ne pensais pas que le nom était simplement PICTURE1 (et ça c'est pas marqué dans la doc )
Sentaro21 Hors ligne Membre Points: 878 Défis: 0 Message

Citer : Posté le 07/06/2020 01:44 | #


This is LoadPictureMCS(), which gets the address of the Pict in C.Basic.

char * MCS_LoadPICT( char *pictname, int *length ) {
    TDirectoryItem *item;
    int tmp[4];
    int i,r;
    char flags_0;
    int  data_ptr;
    int  data_length;
    r = MCS_SearchDirectoryItem( (unsigned char *)"main", (unsigned char *)pictname, &flags_0, (TDirectoryItem *)&tmp, &data_ptr, & data_length );
    if ( r != 0    ) return NULL;
    *length = data_length;
    return (char*)data_ptr-0x4C;
}

void SetPICTname( int pictNo, char *pictname ){
    unsigned char c,d;
    c=pictNo/10+'0';
    d=pictNo%10+'0'; if ( c=='0' ) { c=d; d=0; }

    pictname[0]='P';
    pictname[1]='I';
    pictname[2]='C';
    pictname[3]='T';
    pictname[4]= c;
    pictname[5]= d;
    pictname[6]='\0';
    pictname[7]='\0';
}

char * LoadPictureMCS( int pictNo, int *length ){
    char pictname[32];
    char *pict;
    SetPICTname( pictNo, pictname );
    return pict = MCS_LoadPICT( pictname, &(*length) );
}

Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Lephenixnoir En ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 07/06/2020 09:17 | #


Thank you for sharing this code. I'm not surprised you have to use syscalls for that. fxlib's main memory functions are kinda hard to use.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

Citer : Posté le 07/06/2020 17:23 | #


(Sorry, I can't speak English very well. )
Veni, vidi, mais pas encore vinci le code...
Je n'ai qu'une vague idée de la notion de syscall, et le code est, pour moi, ... carrément obscur.
Alors si un super membre pourrait m'éclairer sur ce sujet, ce serait avec joie
Je ne demande que quelques commentaires du code ci-dessus et une définition assez précise des syscalls et de leur utilisation en C...
Je ne pourrais revenir avant samedi prochain, vous avez donc tout le temps de me fignoler une réponse assez complète, pour que je n'aie plus de question à poser à ce sujet.

Si vous le faites, je vous dis merci d'avance et à samedi !
Lephenixnoir En ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 07/06/2020 17:44 | #


En gros... les syscalls (ici) c'est des fonctions dans l'OS. Comme les fonctions de fxlib ; en fait beaucoup de fonctions de fxlib sont juste des syscalls déguisés.

Concernant la mémoire principale, les syscalls sont beaucoup plus riches que Bfile et permettent de faire marcher toute l'histoire. Ils sont documentés dans les notes de SimLo, ici et ici (MCS est le nom donné à la mémoire principale).

C'est assez abrupt et honnêtement si tu n'as pas une bonne expérience du C je m'attends pas à ce que tu comprennes les détails. Mais ça t'empêchera pas de faire marcher ton add-in.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

Citer : Posté le 07/06/2020 18:15 | #


J'ai de quoi me documenter, là, merci Lephé !
Lephenixnoir En ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 07/06/2020 18:16 | #


Bon courage
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

Citer : Posté le 07/06/2020 18:18 | #


Merci ! J'en aurais besoin, effectivement !

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 224 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd