Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
dans la serie les mysteres du C
- paulfjujo

Maître- Messages : 3285
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
ce n'est pas la serie
Les mysteres de l'Ouest ... avec James Conrad
mais les mysteres du C dans l'Est .. avec paulfjujo
me voci de nouveau confronté à un smilblick ..
probablement un bug de ma part
je veux afficher l'entete d'un fichier BMP 16 bits , contenue dans les 54 premiers bytes
Utilisant UART RX Interrupt,
je lance une capture du fichier sur un compte d'octets atteint ..54
et j'affiche le contenu ... qui n'atteint pas 54 valeurs ?
avec ce code C (XC8)
uint16_t k;
Buffer1[256] recoit l'entete du fichier BMP
p1 = pointeur sur debut du Buffer1
Bavard=2:
resultat obtenu sur YAT Terminal
Problemo :
quid des des valeurs manquantes 50,52,53 ?
Entete vue par XNVIEW
je viens de rajouter ce test :
j'ai bien 54 valeurs 0 à 53 , mais toujours manquantes dans la mise en forme
Les mysteres de l'Ouest ... avec James Conrad
mais les mysteres du C dans l'Est .. avec paulfjujo
me voci de nouveau confronté à un smilblick ..
je veux afficher l'entete d'un fichier BMP 16 bits , contenue dans les 54 premiers bytes
Utilisant UART RX Interrupt,
je lance une capture du fichier sur un compte d'octets atteint ..54
et j'affiche le contenu ... qui n'atteint pas 54 valeurs ?
avec ce code C (XC8)
uint16_t k;
Buffer1[256] recoit l'entete du fichier BMP
p1 = pointeur sur debut du Buffer1
Bavard=2:
Code : Tout sélectionner
if(Requete_BMP==0)
{
CPrint(" Entete BMP de 54 bytes\r\n");// (6x8)+6 bytes
for (i=0;i<6;i++)
{
PrintChar((char)i+48);PrintChar('>');PrintChar(' ');
for (j=0;j<8;j++)
{
k=(i*8)+j;
Un.Entete_BMP[k] =*(p1+k);
if(Bavard>1)
sprintf( CRam1,"%3d> 0x%02X ",k,*(p1+k) );
else
sprintf( CRam1,"0x%02X ",*(p1+k) );
Print(CRam1);
}
CRLF1();
}
k=k+1;
PrintChar('6');PrintChar('>');PrintChar(' ');
for (j=0;j<6;j++)
{
k=k+j;
if(k>54) break;
Un.Entete_BMP[k] =*(p1+k);
//*( Entete_BMP+k)=*(p1+k);
if(Bavard>1)
sprintf( CRam1,"%3d> 0x%02x ",k,*(p1+k) );
else
sprintf( CRam1,"0x%02x ",*(p1+k) );
Print(CRam1);
}
CRLF1();
}
else
{ // --- dialogue normal operateur --------
if((*(p1)=='H') && (*(p1+3)=='p')) //Help<CR>
{
CPrint("\r\n Help : Help<CR> \r\n");
CPrint(" RTC Update: U;18;01;26;11;36;06;#<CR>\r\n");
CPrint(" exemple pour :18 janv 2026 11:36 Dimanche\r\n");
CPrint(" Nota: lundi=0 dimanche=6\r\n");
CPrint(" BAUD=X pour SPI Speed x=0=>32Mhz X=1=>16Mhz X=3=>8MHz X=7=> 4MHz\r\n");
CPrint(" BAV=0,1..9 -> Bavard pour tracage programme\r\n");
CRLF1();
p1=0;
}
resultat obtenu sur YAT Terminal
Code : Tout sélectionner
Demande d'envoi Fichier Image BMP , valide 4sec
.. sur terminal YAT , send file :Image_128x160_16.bmp
Stop envoi terminal YAT
Entete BMP de 54 bytes
0> 0> 0x42 1> 0x4D 2> 0x46 3> 0xA0 4> 0x00 5> 0x00 6> 0x00 7> 0x00
1> 8> 0x00 9> 0x00 10> 0x46 11> 0x00 12> 0x00 13> 0x00 14> 0x38 15> 0x00
2> 16> 0x00 17> 0x00 18> 0x80 19> 0x00 20> 0x00 21> 0x00 22> 0x60 23> 0xFF
3> 24> 0xFF 25> 0xFF 26> 0x01 27> 0x00 28> 0x10 29> 0x00 30> 0x03 31> 0x00
4> 32> 0x00 33> 0x00 34> 0x00 35> 0xA0 36> 0x00 37> 0x00 38> 0x20 39> 0x1C
5> 40> 0x00 41> 0x00 42> 0x20 43> 0x1C 44> 0x00 45> 0x00 46> 0x00 47> 0x00
6> 48> 0x00 49> 0x00 51> 0x00 54> 0x00
HEADER type : 4D42
Taille: 41030
Headsize 70
W=128 x H=-160
plan= 1
bitsColor= 16
ResolH: 7200
ResolV: 7200
Problemo :
quid des des valeurs manquantes 50,52,53 ?
Entete vue par XNVIEW
je viens de rajouter ce test :
Code : Tout sélectionner
CPrint("Contenu Entete( Buffer1)\r\n");
p1=&Buffer1[0];
for (i=0;i<54;i++)
{
sprintf(CRam1,"i=%5d -> 0x%02X\r\n",i,*(p1+i));
Print(CRam1);
}
CRLF1();
Code : Tout sélectionner
Entete BMP de 54 bytes
Contenu Entete( Buffer1)
i= 0 -> 0x42
i= 1 -> 0x4D
i= 2 -> 0x46
i= 3 -> 0xA0
i= 4 -> 0x00
i= 5 -> 0x00
i= 6 -> 0x00
i= 7 -> 0x00
i= 8 -> 0x00
i= 9 -> 0x00
i= 10 -> 0x46
i= 11 -> 0x00
i= 12 -> 0x00
i= 13 -> 0x00
i= 14 -> 0x38
i= 15 -> 0x00
i= 16 -> 0x00
i= 17 -> 0x00
i= 18 -> 0x80
i= 19 -> 0x00
i= 20 -> 0x00
i= 21 -> 0x00
i= 22 -> 0x60
i= 23 -> 0xFF
i= 24 -> 0xFF
i= 25 -> 0xFF
i= 26 -> 0x01
i= 27 -> 0x00
i= 28 -> 0x10
i= 29 -> 0x00
i= 30 -> 0x03
i= 31 -> 0x00
i= 32 -> 0x00
i= 33 -> 0x00
i= 34 -> 0x00
i= 35 -> 0xA0
i= 36 -> 0x00
i= 37 -> 0x00
i= 38 -> 0x20
i= 39 -> 0x1C
i= 40 -> 0x00
i= 41 -> 0x00
i= 42 -> 0x20
i= 43 -> 0x1C
i= 44 -> 0x00
i= 45 -> 0x00
i= 46 -> 0x00
i= 47 -> 0x00
i= 48 -> 0x00
i= 49 -> 0x00
i= 50 -> 0x00
i= 51 -> 0x00
i= 52 -> 0x00
i= 53 -> 0x00
0> 0> 0x42 1> 0x4D 2> 0x46 3> 0xA0 4> 0x00 5> 0x00 6> 0x00 7> 0x00
1> 8> 0x00 9> 0x00 10> 0x46 11> 0x00 12> 0x00 13> 0x00 14> 0x38 15> 0x00
2> 16> 0x00 17> 0x00 18> 0x80 19> 0x00 20> 0x00 21> 0x00 22> 0x60 23> 0xFF
3> 24> 0xFF 25> 0xFF 26> 0x01 27> 0x00 28> 0x10 29> 0x00 30> 0x03 31> 0x00
4> 32> 0x00 33> 0x00 34> 0x00 35> 0xA0 36> 0x00 37> 0x00 38> 0x20 39> 0x1C
5> 40> 0x00 41> 0x00 42> 0x20 43> 0x1C 44> 0x00 45> 0x00 46> 0x00 47> 0x00
6> 48> 0x00 49> 0x00 51> 0x00 54> 0x00
j'ai bien 54 valeurs 0 à 53 , mais toujours manquantes dans la mise en formeVous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
dans la serie les mysteres du C
Essaie cette version plus courte, et on ne met pas à jour la structure Un pour le test.
Code : Tout sélectionner
for (k=0; k<54; k++) {
if (!(k%8)) {
if (k) CRLF1();
PrintChar((char)(k/8)+48);PrintChar('>');PrintChar(' ');
}
if (Bavard>1) sprintf( CRam1,"%3d> 0x%02X ",k,*(p1+k) );
else sprintf( CRam1,"0x%02X ",*(p1+k) );
Print(CRam1);
}
CRLF1();
dans la serie les mysteres du C
dans la serie les mysteres du C
- paulfjujo

Maître- Messages : 3285
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
satinas a écrit :Essaie cette version plus courte, et on ne met pas à jour la structure Un pour le test.Code : Tout sélectionner
for (k=0; k<54; k++) {
if (!(k%8)) {
if (k) CRLF1();
PrintChar((char)(k/8)+48);PrintChar('>');PrintChar(' ');
}
if (Bavard>1) sprintf( CRam1,"%3d> 0x%02X ",k,*(p1+k) );
else sprintf( CRam1,"0x%02X ",*(p1+k) );
Print(CRam1);
}
CRLF1();
Code : Tout sélectionner
0> 0> 0x42 1> 0x4D 2> 0x46 3> 0xA0 4> 0x00 5> 0x00 6> 0x00 7> 0x00
1> 8> 0x00 9> 0x00 10> 0x46 11> 0x00 12> 0x00 13> 0x00 14> 0x38 15> 0x00
2> 16> 0x00 17> 0x00 18> 0x80 19> 0x00 20> 0x00 21> 0x00 22> 0x60 23> 0xFF
3> 24> 0xFF 25> 0xFF 26> 0x01 27> 0x00 28> 0x10 29> 0x00 30> 0x03 31> 0x00
4> 32> 0x00 33> 0x00 34> 0x00 35> 0xA0 36> 0x00 37> 0x00 38> 0x20 39> 0x1C
5> 40> 0x00 41> 0x00 42> 0x20 43> 0x1C 44> 0x00 45> 0x00 46> 0x00 47> 0x00
6> 48> 0x00 49> 0x00 50> 0x00 51> 0x00 52> 0x00 53> 0x00
c'est OK ...
l'usage de l'union mettrait le boxon ?
je retesterai en incluant le U ...dans la boucle.
declaration union
Code : Tout sélectionner
union
{
struct
{// size is 14 bytes
uint16_t bfType; //bitmap id
uint32_t bfSize; //The size of the BMP file in bytes
uint16_t bfReserved1;
uint16_t bfReserved2;
uint32_t bfOffBits;
//the size of this header, in bytes (40)
uint32_t biSize;
int32_t biWidth; //the bitmap width in pixels (signed integer)
int32_t biHeight; //the bitmap height in pixels (signed integer)
uint16_t biPlanes; //the number of color planes (must be 1)
uint16_t biBitCount; //the number of bits per pixel, which is the color depth of the image. Typical values are 1, 4, 8, 16, 24 and 32.
uint32_t biCompression;
uint32_t biSizeImage; //the image size. This is the size of the raw bitmap data; a dummy 0 can be given for BI_RGB bitmaps.
int32_t biXPelsPerMeter; //the horizontal resolution of the image
int32_t biYPelsPerMeter; //the vertical resolution of the image
uint32_t biClrUsed;
uint32_t biClrImportant;
} H_BMP;
uint8_t Entete_BMP[54];
}Un;
dans la serie les mysteres du C
dans la serie les mysteres du C
dans la serie les mysteres du C
dans la serie les mysteres du C
Bonjour paulfjujo, et tout le forum,
J'écris actuellement un programme pour visionner un fichier bmp 24 bits en ASM
, mais avant toute chose, je me demandais comment ça
fonctionne cette lecture, j'ai alors entrepris de l'écrire en RapidQ, et ça fonctionne bien.
Je te fais parvenir le programme compilé, et la source. dans ce programme, tu peux lire juste les fichiers BMP non compressés (24 bits)
Après avoir décompressé le zip, tu pourras charger l'image exemple qui se trouve dans le dossier image. Notre célèbre tigre!
Une fois fait, toutes les informations du bmp vont s'afficher, après il te suffit d'appuyer sur le deuxième bouton pour voir apparaître l'image.
Pour la transformation en RGB565, ce n'est pas facile en rapidQ, je le ferai dans la source ASM que je fournirai ici.
Téléchargement : ICI
A+
J'écris actuellement un programme pour visionner un fichier bmp 24 bits en ASM
fonctionne cette lecture, j'ai alors entrepris de l'écrire en RapidQ, et ça fonctionne bien.
Je te fais parvenir le programme compilé, et la source. dans ce programme, tu peux lire juste les fichiers BMP non compressés (24 bits)
Après avoir décompressé le zip, tu pourras charger l'image exemple qui se trouve dans le dossier image. Notre célèbre tigre!
Une fois fait, toutes les informations du bmp vont s'afficher, après il te suffit d'appuyer sur le deuxième bouton pour voir apparaître l'image.
Pour la transformation en RGB565, ce n'est pas facile en rapidQ, je le ferai dans la source ASM que je fournirai ici.
Téléchargement : ICI
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Modifié en dernier par Temps-x le sam. 21 févr. 2026 12:27, modifié 2 fois.
dans la serie les mysteres du C
- paulfjujo

Maître- Messages : 3285
- Âge : 75
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour à tous,
à Satinas :
ta solution est effectivement bien plus courte et concise
mais je ne pige pas bien
if (k) CRLF1();
faux que pour k=0 ? sinon vrai dans les autres cas ?
le test k>0 est sous entendu ?
je pensais qu'on ne pouvait faire un test direct que sur une variable boolenne et non sur un entier ...
retesté avec inclusion Union .. OK
à noter que la valeur Hauteur est negative ..parcours de l'image de bas en haut dans le fichier
remise en positive
------------------------------------------------------------------------------------
à temps X :
test de ton appli rapidQ ..OK
à Satinas :
ta solution est effectivement bien plus courte et concise
mais je ne pige pas bien
if (k) CRLF1();
faux que pour k=0 ? sinon vrai dans les autres cas ?
le test k>0 est sous entendu ?
je pensais qu'on ne pouvait faire un test direct que sur une variable boolenne et non sur un entier ...
retesté avec inclusion Union .. OK
Code : Tout sélectionner
Entete BMP de 54 bytes
0> 0> 0x42 1> 0x4D 2> 0x46 3> 0xA0 4> 0x00 5> 0x00 6> 0x00 7> 0x00
1> 8> 0x00 9> 0x00 10> 0x46 11> 0x00 12> 0x00 13> 0x00 14> 0x38 15> 0x00
2> 16> 0x00 17> 0x00 18> 0x80 19> 0x00 20> 0x00 21> 0x00 22> 0x60 23> 0xFF
3> 24> 0xFF 25> 0xFF 26> 0x01 27> 0x00 28> 0x10 29> 0x00 30> 0x03 31> 0x00
4> 32> 0x00 33> 0x00 34> 0x00 35> 0xA0 36> 0x00 37> 0x00 38> 0x20 39> 0x1C
5> 40> 0x00 41> 0x00 42> 0x20 43> 0x1C 44> 0x00 45> 0x00 46> 0x00 47> 0x00
6> 48> 0x00 49> 0x00 50> 0x00 51> 0x00 52> 0x00 53> 0x00
HEADER type : 4D42
Taille: 41030
Headsize 70
W=128 x H=-160
plan= 1
bitsColor= 16
ResolH: 7200
ResolV: 7200à noter que la valeur Hauteur est negative ..parcours de l'image de bas en haut dans le fichier
remise en positive
------------------------------------------------------------------------------------
à temps X :
test de ton appli rapidQ ..OK
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
dans la serie les mysteres du C
Bonjour,
C'est dans la définition de l'instruction if, elle est non vérifiée si l'expression est nulle, et vérifiée dans tous les autres cas, c'est à dire < 0 ou > 0.
Quand tu écris if (A == B) il évalue l'expression A == B qui donne bien un booléen, mais c'est un cas particulier pour if.
Un jour il y a longtemps j'en ai eu marre de taper des "== 0" ou "!= 0" d'où les lignes peu recommandables cependant correctes :
if (k) au lieu de if (k != 0)
if (!k) au lieu de if (k == 0)
if (!(k%8)) au lieu de if ((k%8) == 0)
J'ai bien sûr demandé à ChatGPT de valider ma réponse, c'est bon :
"Elles ne sont pas « peu recommandables », elles sont juste moins explicites"
Il se permet tout de même de conclure, le rustre :
"La vraie question est : écris-tu pour le compilateur ou pour le prochain humain qui lira ton code ?"
Sous entendu lui il s'en fout, il s'en sortira toujours !
C'est dans la définition de l'instruction if, elle est non vérifiée si l'expression est nulle, et vérifiée dans tous les autres cas, c'est à dire < 0 ou > 0.
Quand tu écris if (A == B) il évalue l'expression A == B qui donne bien un booléen, mais c'est un cas particulier pour if.
Un jour il y a longtemps j'en ai eu marre de taper des "== 0" ou "!= 0" d'où les lignes peu recommandables cependant correctes :
if (k) au lieu de if (k != 0)
if (!k) au lieu de if (k == 0)
if (!(k%8)) au lieu de if ((k%8) == 0)
J'ai bien sûr demandé à ChatGPT de valider ma réponse, c'est bon :
"Elles ne sont pas « peu recommandables », elles sont juste moins explicites"
Il se permet tout de même de conclure, le rustre :
"La vraie question est : écris-tu pour le compilateur ou pour le prochain humain qui lira ton code ?"
Sous entendu lui il s'en fout, il s'en sortira toujours !
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 8 invités


quand on a le nez dans le guidon, on perd de vue l'essentiel
les gars..