Posté le 15/07/2017 13:54
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 73 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
Citer : Posté le 23/12/2018 16:35 | #
Oh mince excuse moi j'avais déjà compilé un projet gint mais j'avais complètement oublié que j'avais fait la commande fxconv... Je suis quelqu'un de... pressé
Citer : Posté le 23/12/2018 16:46 | #
Il n'y a pas de mal !
Citer : Posté le 23/12/2018 17:21 | #
Bon... là j'ai commencé à tester des trucs et la casio n'arrive pas à afficher l'image avec du gris. J'arrive à afficher une image noir-blanc sans problème mais l'image avec du gris ça passe pas des petites idées ?
mon main.c :
#include <keyboard.h>
int main(void)
{
extern image_t image1;
extern image_t image2;
dclear();
dimage(0, 0, &image1);
dimage(20, 0, &image2);
dtext(0, 30, "Salut ?");
dupdate();
getkey();
return 0;
}
mon petit fichier pour compiler :
sh3eb-elf-gcc *.o assets/*.o -o tmp.elf `fxsdk --cflags --libs`
sh3eb-elf-objcopy -R .comment -R .bss -O binary tmp.elf tmp.bin
g1a-wrapper tmp.bin -o addin.g1a -i icon.bmp
rm tmp* *.o assets/*.o
Citer : Posté le 23/12/2018 17:42 | #
Pour afficher une image en gris, il faut lancer le moteur avec gray_start() puis utiliser les fonctions de dessin en gris... notamment gimage(), gtext() et gupdate().
Citer : Posté le 23/12/2018 18:30 | #
Ok c'est bon ça marche, vraiment bien fait tout ça Pour le reste je vais juste essayer de lire le code source de ton jeu Arena histoire de voir comment tu te débrouilles
Citer : Posté le 23/12/2018 19:13 | #
N'oublie pas de quitter le moteur avec gray_stop(). Bon courage, du reste !
Citer : Posté le 23/12/2018 19:14 | #
Bon du coup j'ai pas tout suivi, mais on a un truc pour la G90+E ou pas encore ?
Citer : Posté le 23/12/2018 19:15 | #
Pas encore, je suis presque à cet endroit ! Je revois actuellement le dessin sur Graph 85 et ensuite je passe au graphismes sur Graph 90.
Citer : Posté le 24/12/2018 01:26 | #
Bonjour (il est tard), j'essaye d'afficher un fond noir et y afficher un sprite au milieu, le problème c'est que le blanc de mon sprite est considéré comme transparent du coup on voit rien
EDIT: J'ai aussi un autre problème j'ai une fonction anim() qui ressemble grosso-modo à :
dclear();
gray_start();
gclear();
//plein d'animation
gclear();
gray_stop();
}
malgré mon gclear au début et à la fin, le dernier sprite affiché se réaffiche au deuxième appel de la fonction c'est fort gênant et aussi quand je fais un grect(..., color_black) je crois qu'il affiche pas dans le gray engine... pas sûr mais j'ai cette impression. En fait dans mon problème du dessus j'utilise color_dark car avec color_black le rectangle disparaît tout simplement quand j'affiche mon sprite
Citer : Posté le 24/12/2018 10:32 | #
Note que ce n'est pas nécessaire d'appeler dclear() avant de lancer le moteur de gris.
Surtout, quand tu as fini de dessiner il faut appeler gupdate() (gris) ou dupdate() (mono) sinon rien n'est visible à l'écran.
Citer : Posté le 24/12/2018 11:14 | #
Bon je vais détailler. J'ai rebasculé vers le display standard mais j'ai le même problème :
dupdate();
sleep_ms(2000);
dimage_part(DWIDTH/2-29/2, DHEIGHT/2-27/2, &img_sans, 0, 0, 29, 27);
dupdate();
sleep_ms(3000);
Donc on est d'accord que c'est censé remplir l'écran de noir,
2 secondes plus tard on est censé avoir la tête de sans s'afficher pendant 3 secondes sur fond noir. Or je n'ai que du noir du début jusqu'à la fin. Pour afficher la tête de sans je suis obligé de dclear() juste après le sleep_ms(2000).
Citer : Posté le 24/12/2018 11:17 | #
D'accord. Je peux voir le fichier .bmp que tu as converti ?
Citer : Posté le 24/12/2018 11:18 | # | Fichier joint
Le voici ci-joint.
Citer : Posté le 24/12/2018 11:28 | #
Ah, je vois le problème. Les bitmaps noir et blanc sont affichés en mode "ou", c'est-à-dire que les pixels noirs seulement sont dessinés. C'est pensé pour faire du dessin sur fond blanc. Toi il te faudrait que seuls les pixels blancs soient dessinés, c'est-à-dire le mode "et".
Il devrait y avoir une fonction pour faire ça avec ce sprite, mais c'est quelque chose que je n'ai pas encore implémenté.
À la place, tu peux utiliser un bitmap noir-blanc-transparent avec du transparent autour des têtes.
Citer : Posté le 24/12/2018 11:33 | #
À quoi cela me sert de mettre du transparent autour des têtes puisque de toute façon je vais encore afficher mon blanc sur le rectangle noir, ce qui va donner du noir Je ne comprends pas
Citer : Posté le 24/12/2018 11:40 | #
Je m'excuse pour ça. Voilà une explication plus détaillée.
Quand tu as un sprite en noir et blanc de forme rectangulaire, tu peux l'afficher de plusieurs façon à l'écran, car il y a plusieurs façon de combiner les pixels de l'image et ceux de l'écran.
- Mode OVER : on affiche toute l'image en écrasant ce qui est déjà visible à l'écran. C'est le mode le plus simple mais pas celui que l'on veut en général, car cela écrase toujours une partie rectangulaire de l'écran. Ça veut dire que tu ne peux pas afficher un cercle noir sans effacer ce qui se trouve autour.
- Mode OR : ce mode consiste à dessiner les pixels noirs de l'image et ne rien faire avec les blancs. Cela revient à considérer le blanc comme transparent. Pour la majorité des applications, qui dessinent en noir sur blanc, c'est le mode le plus confortable, et c'est aussi celui par défaut de gint.
- Mode AND : cette fois on dessine les pixels blancs et on considère les noirs comme transparents. C'est celui dont tu as besoin mais c'est un cas rare.
- D'autres modes exotiques peuvent exister.
Ça, c'est pour les sprites uniquement noir et blanc. Quand un sprite comporte du noir, du blanc et du transparent, la seule façon correcte de faire c'est de dessiner le blanc, dessiner le noir, et ne rien faire avec le transparent.
Normalement gint devrait avoir deux façons de faire des dessins :
1. Utiliser un sprite noir et blanc et choisir le mode (comme MonochromeLib)
2. Utiliser un sprite avec du transparent ou du gris, pour lequel un seul mode est possible
Actuellement je n'ai implémenté que le second, ce qui en principe n'est pas grave car si tu veux afficher un sprite en mode AND, tu peux ajouter des pixels transparents pour forcer fxconv à le voir comme un sprite noir-blanc-transparent et ainsi choisir le mode de dessin qui afficher le blanc et le noir.
Est-ce clair pour toi ?
Je te propose une autre solution : tu fais le dessin en noir sur blanc sans te poser de questions, avec le mode OR par défaut et en inversant le noir et le blanc dans tes sprites, et à la fin, juste avant le dupdate(), tu inverses tout l'écran avec drect().
Citer : Posté le 24/12/2018 12:00 | #
Bon, j'ai opté pour la solution avec le transparent et cela marche bien Du coup avec le transparent ça utilise le mode OVER c'est ça ?
Citer : Posté le 24/12/2018 12:08 | #
Pas tout à fait... je vais tenter de faire encore plus clair !
Quand on dessine un bitmap, chaque pixel peut être traité de trois façons (couleurs) différentes :
1. Noir
2. Blanc
3. Transparent
Quand les trois couleurs sont présentes dans l'image, on ne peut que les afficher pour ce qu'elles sont : le blanc en blanc, le noir en noir, le transparent en transparent. C'est le résultat que tu viens d'obtenir.
Quand il n'y a que du noir et du blanc, on a plusieurs choix :
1. Afficher le blanc comme blanc et le noir comme noir (OVER)
2. Afficher le blanc comme transparent et le noir comme noir (OR)
3. Afficher le blanc comme blanc et le noir comme transparent (AND)
Les trois modes sont utiles, mais je n'ai implémenté que OR. Et comme tu peux le voir, ce mode ne permet pas de dessiner du blanc (que du noir et du transparent) ! :o
C'est pour ça que je t'ai proposé d'utiliser une image avec de la transparence.
C'est un peu de ma faute aussi pour ne pas avoir implémenté le AND, mais dans tous les cas tu aurais au moins eu besoin de spécifier que tu voulais le mode AND au lieu du OR, qui est le défaut.
Citer : Posté le 24/12/2018 13:07 | #
Du coup si je comprends bien, on se sert du transparent pour dessiner... du blanc... Bon bref peu importe mais le OVER c'est le meilleur non ? Avec les images transparentes, on dessine du blanc quand il y a du blanc, du noir quand il y a du noir, et on fait rien quand c'est transparent ololo mais oh là
EDIT: là j'ai un autre problème, ça doit être une histoire d'encodage de fichier, c'est vraiment le bordel on peut avoir des pixels transparents qui peuvent traîner, du coup j'ai mis mon image en grayscale sur GIMP mais j'ai l'impression que ce n'est pas reconnu car ça affiche que dalle dans le gray engine et le display standard J'ai mis l'image en fichier joint. (dans le prochain message car étrangement quand je modifie mon message je n'ai pas le droit de mettre de fichier bmp)
Citer : Posté le 24/12/2018 13:51 | # | Fichier joint
Le fichier ci-joint.
EDIT: J'ai arrangé le problème j'ai ouvert le fichier avec un autre éditeur d'image (pinta) et ça a rendu le fichier compatible.
Citer : Posté le 24/12/2018 14:44 | #
DBon bref peu importe mais le OVER c'est le meilleur non ?
On pourrait le croire, mais en fait... pas vraiment. Quand tu utilises OVER, tu écrases forcément un rectangle complet, tu ne peux pas dessiner quelque chose qui a une autre forme. Les cas où c'est utilisable sont assez rares finalement.
Les petits problèmes de ce genre niveau encodage, sont la raison pour laquelle la prochaine version de fxconv prend du PNG et le décode avec libpng. Ça marche à tous les coups et ça m'évite d'entretenir un lecteur de BMP maison. Tant mieux si tu as réussi à t'en sortir ! De façon générale le ARGB32 est le plus safe.