Vous n'êtes pas identifié.
Salut a tous!
Je suis un débutant ds la prog en c et je voudrais d'abord remercier casioworld pour son excellent tutorial.
Seulement, en suivant ce tuto, g eu un problme pr afficher une bmp:
en utilisant la fonction disp_bmp de casio2.h de cette manière:
"disp_bmp(picture,0);", (où picture est une image codée par bmp2c), je n'obtient qu'une espèce de purée de pixels affichés à l'écran, rien a voir avec l'image initiale.
Pourtant, ça marche si j'utilise directement la fonction de cette manière:
asm{ mov ax,0
shl ax,6
add ax,0x1a20
mov es,ax
mov si,offset picture
xor di,di
mov cx,0x200
cld
rep movsw }
Pouvez vous me dire où est mon erreur, parceque je vois vraiment pas ce qui ne vas pas.
Merci d'avance!
normalement ca doit marcher
enleve le mot clé offset, je pense que la lecture des données ne doit pas se faire au bon endroit (j'en suis pas sûr)
Hors ligne
"connaissant casioworld ca doit venir du tuto "
lol
Tu pourrais pas m'envoyer ton prog pour voir ou se trouve ton erreure. Car le soucis vient peut etre d'une erreure dans mon tuto !
Hors ligne
oui c'est le mot offset qui merde
Hors ligne
Je sais pas si c'est le mot offset qui merde car comme je vous l'ai déja dit, l'image s'affiche très bien si j'écris le code directement (voir plus haut).
Mais c'est très embettant de la réécrire à chaque fois et on peut normalement l'utiliser directement puisqu'elle est dans casio2.h
En gros le prog ça donne:
#include <stdio.h>
#include <conio.h>
#include <CASIO2.h>
BMPTabType picture = {0x0,...}; //image codée par bmp2c
int main()
{
clrscr();
disp_bmp(picture,0); //fonction include ds casio2.h qui m'affiche une purée de pixels
getch();
... //le reste du prog
Estce que c'est l'appel de la fonction qui n'est pas fait correctement? Ou il faut que j'enlève le mot offset de la fonction dans casio2.h?
Je confirme, tu n'as qu'a supprimer le mot "offset" et ca marchera !
Comme quoi le probleme ne venait pas de mon tuto !
je vais ressortir une version du tuto avec la fonction corrigée !
Hors ligne
bin dsl !
ms ya des trucs que je capte pas parfois : quand vous sorter des tuto, prog, jeux etc vous essayé si ca marche des fois ?
Hors ligne
je t'explique la raison de ce probleme. J'ai fais le tuto avec casio2h qui foncytionnaot. SuperNA sort une version débugguée et je n'ai pas vérifié !
c'est tout !
Hors ligne
Ah ok...
Merci beaucoup!
Je pense que cela dépend comment tu as déclaré ta fonction :
void disp_bmp(void* picture,unsigned int page) {asm{ mov ax,0 shl ax,6 add ax,0x1a20 mov es,ax mov si,picture xor di,di mov cx,0x200 cld rep movsw }}
doit marcher !
Hors ligne
Excuse moi mais j'aime bien comprendre: Pourquoi void*?
Et en mettant ca pas besoin d'enlever le mot offset?
ah non excuse j'avais pas vu que t'avais enlevé offset
si car si tu mets offset ca prend l'adresse de picture et pas l'adresse pointée par picture
c différent.
void* c pour dire que n'importe quel type est supporté (char*, int*, ....)
Hors ligne
Ah d'accord...
Mais la fction que vous m'avez donné, c'est pour afficher l'image "picture", mais si je veux afficher n'importe quelle image sur n'importe quelle page(buffer), est ce que je fait comme ca?
...
image={...};
image2={...};
...
int main()
{ ...
disp_bmp(image,0); //afficher image sur page0
...
disp_bmp(image2,2); //afficher image2 sur page2
...
}
et avec comme fonction:
void disp_bmp(void* picture,unsigned int page)
{asm{ mov ax, page
shl ax,6
add ax,0x1a20
mov es,ax
mov si,picture
xor di,di
mov cx,0x200
cld
rep movsw }} C'est bien ca?
oui c parfait
Hors ligne
Mais je te conseille pour déclarer tes images :
"unsigned char image1[1024]={ 0xFF,0x0, ... , 0xAE };"
Par exemple...
Ceci dit, si tu déclare tes images comme cela, je ne comprends pas pourquoi ca buggue avec la fonction usuelle et traditionnelle disp_bmp... Théoriquement il ne devrait y avoir aucun probleme
Hors ligne
Bah en fait je sais pas si ca a un rapport mais ds casio2.h, il y avait:
#define DATA_SIZE 1024
...
typedef unsigned char BMPTabType [DATA_SIZE];
... Et ensuite la fonction était:
void disp_bmp (BMPTabType BmpTab,int page)
asm{ mov ax,page
shl ax,6
add ax,0x1a20
...
C'est peut-être une connerie ce que je dit mais vut que ca ressemble à ce que t'a marqué j'aimerais savoir si il y a quand même besoin de le mettre
Oui il faut le garder si tu veux que je marche sinon ton compilateur va te mettre des messages d'erreurs...
Par contre, tu peux enlever
#define DATA_SIZE 1024
mais il faut remplacer :
typedef unsigned char BMPTabType [DATA_SIZE];
par
typedef unsigned char BMPTabType [1024];
Hors ligne
Ok.
Tien au fait j'ai autre chose à faire remarquer à casioworld pour son tutorial:
Qaund tu parles des fonctions graphiques, tu indique une ligne à rajouter pour avoir un repère plus naturel. Je sais pas si ca vien de la version de casio2.h que j'ai, mais sans rajouter la ligne, le repére part déja d'en haut à gauche.
typedef unsigned char BMPTabType [1024];
void disp_bmp (BMPTabType BmpTab,int page) ;
si tu mets ca, cela doit marcher avec offset car tu copies les 1024 octets pointés par ton image dans bmptab. Mais je ne te le conseil pas car tu fais une copie, et donc c plus lent et tu bouffes 1 Ko pour rien.
Hors ligne
ecoute, je te remercie de ton info. je vais modifer cela !
en fait j'ai fais le tuto avec des fonctions qui n'était celle de casio2.h puis quand je suis passé à casio2h je n'ai pas fait toute les modifes.
sinon, mon tuto t'aide bcp ?
Hors ligne
Et hop, je me suis enregistré au passage.
Pas de quoi pour les infos, mais je m'étonne que personne n'ai remarqué tt ca avant.
J'utilise un autre tuto pr apprendre le c, mais oui ton tuto me sert beaucoup pour ensuite adapter le programme à la graph100, et pour utiliser correctement les fonctions qui sont spécifiques.
Je commence juste, mais grace à ton tuto g déja presque terminé une version de boxworld faite par moi même(c un de mes premiers progs en c alors faut pas s'attendre à qqchose d'exeptionnel) mais pour moi c déja pas mal et ca me change du basic!!!
Hors ligne