Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
762 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Image ne s'affiche pas correctement sur un LCD

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Image ne s'affiche pas correctement sur un LCD

n°1891604
Moiii9
Posté le 05-06-2009 à 11:45:44  profilanswer
 

Bonjour,
 
J'essaie d'afficher une image bmp 5r 6v 5b 128*128  65k Couleurs sur un petit écran lcd  
je procède de la manière suivante :
 
 

Code :
  1. /*
  2. *
  3. * Affiche une image bmp de 5r 6v 5b de 128*128 65k couleur sur un ulcd 4D system
  4. *
  5. * Paramètre:
  6. *      FILE *fichierImage;
  7. *      fichierImage = fopen("PictureName.bmp", "rb" ); ouverture du fichier bmp en binaire
  8. *
  9. * returns:
  10. *  4 printf du nombre de données envoyées
  11. *
  12. * Remarque(s)
  13. *  entre l'envoie des données et l'affichage sur le uLcd, s'écoulent quelques secondes
  14. */
  15. #define U 32774
  16. void LireBmpParPixel(FILE *fichier)
  17. {
  18. unsigned char *buffer;
  19. unsigned char *bufferTemp;
  20. unsigned char *PtrStartBuffer;
  21. unsigned char *PtrStartBufferTemp;
  22. unsigned char *PtrBufferInverse;
  23. unsigned char *PtrStartBufferInverse;
  24. int caractereActuel;
  25. int caractereActuel2;
  26. long i =0;
  27. long temp=0;
  28. int caractenv=0;
  29. buffer =(unsigned char *) malloc(U);
  30. bufferTemp =(unsigned char *) malloc(U);
  31. PtrBufferInverse =(unsigned char *) malloc(U);
  32.    if(buffer == NULL || bufferTemp == NULL || PtrBufferInverse == NULL)
  33.     printf("Erreur allocation mémoire ..." );
  34.    else
  35.    {
  36.                // Ajoute     I  0  0  128  128  1  (Toutes les données bit par bit pour reconstituer l'image)
  37.                // Donc au début l'écran Lcd recois un
  38.                // I (La commande)  
  39.                // 0 (Position début de l image en x )
  40.                // 0 (Position début de l image en y )
  41.                // 128 (Taille horizontale de l'image)         
  42.                // 128 (Taille verticale de l'image)         
  43.                // 1 (Pour préciser que c'est en 65k couleur et non en 256 couleur)
  44.   PtrStartBuffer = buffer;
  45.   *PtrStartBuffer = 'I';
  46.   PtrStartBuffer++;
  47.   *PtrStartBuffer = (char)0;
  48.   PtrStartBuffer++;
  49.   *PtrStartBuffer = (char)0;
  50.   PtrStartBuffer++;
  51.   *PtrStartBuffer = (unsigned char)128;
  52.   PtrStartBuffer++;
  53.   *PtrStartBuffer = (unsigned char)128;
  54.   PtrStartBuffer++;
  55.   *PtrStartBuffer = (char)1;
  56.   PtrStartBuffer++;
  57.    }
  58. PtrStartBuffer = PtrStartBuffer+(32768);  // on se place a la fin du buffer
  59. if(fichier != NULL)
  60. {
  61. do
  62. {
  63.  caractereActuel = fgetc(fichier); // On lit le caractère
  64.  caractereActuel2 = fgetc(fichier); // On lit le caractère suivant
  65.  if(i>34) // on saute le header de l'image
  66.    {
  67.   if(i==35)
  68.    {
  69.     caractereActuel = fgetc(fichier);
  70.     caractereActuel2 = fgetc(fichier);
  71.    }
  72.   if(i<16422)//  on remplie le buffer depuis la fin vu que les données du bmp sont à l'envers
  73.    {
  74.     *PtrStartBuffer = (unsigned char) caractereActuel2;
  75.     PtrStartBuffer--;
  76.     *PtrStartBuffer = (unsigned char) caractereActuel;
  77.     PtrStartBuffer--;
  78.    }// fin i<32843
  79.   }-//fin i >35
  80.  i++;
  81. } while (caractereActuel != EOF); // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
  82. fclose(fichier); //ferme le fichier
  83. sleep(1);
  84.     PtrStartBuffer=buffer;
  85.     PtrStartBufferTemp=bufferTemp;
  86.     i=0;
  87. while(i<=32774)       //32768
  88.     {
  89.          *PtrStartBufferTemp=*PtrStartBuffer;
  90.               if((i%10240==0 ||i==32774) && i!=0)
  91.               {
  92.                  if(i==32774)
  93.                    caractenv=2054;
  94.                  else
  95.                    caractenv=10240;
  96.            printf("Nbre de données envoyer : %d \n",fossil_writeblock(1,bufferTemp,caractenv));
  97.                  if(i!=32774)
  98.                  sleep(7);
  99.                  *bufferTemp=NULL;
  100.                  PtrStartBufferTemp=bufferTemp;
  101.            }
  102.              PtrStartBuffer++;
  103.              PtrStartBufferTemp++;
  104.              i++;
  105.     }
  106. }
  107. else
  108. printf("Erreur de lecture de fichier" );
  109. printf("Fin d'execution\n" );
  110. return;
  111. }


 
 
 
Le truc c'est que j'ai un décalage de 2 pixels vers la gauche et ej ne comprend pas pourquoi ...  :??:  
Merci en avance pour vos réponses

mood
Publicité
Posté le 05-06-2009 à 11:45:44  profilanswer
 

n°1891841
Emmanuel D​elahaye
C is a sharp tool
Posté le 05-06-2009 à 23:34:35  profilanswer
 

Moiii9 a écrit :

Bonjour,
 
J'essaie d'afficher une image bmp 5r 6v 5b 128*128  65k Couleurs sur un petit écran lcd  
je procède de la manière suivante :
 


Code incopmlet :  


 
-------------- Build: Debug in hello ---------------
 
Compiling: main.c
Linking console executable: bin\Debug\hello.exe
C:\dev\hello\main.c:16: error: syntax error before '*' token
C:\dev\hello\main.c:17: warning: function declaration isn't a prototype
C:\dev\hello\main.c: In function `LireBmpParPixel':
C:\dev\hello\main.c:34: warning: implicit declaration of function `malloc'
C:\dev\hello\main.c:38: error: `NULL' undeclared (first use in this function)
C:\dev\hello\main.c:38: error: (Each undeclared identifier is reported only once
C:\dev\hello\main.c:38: error: for each function it appears in.)
C:\dev\hello\main.c:39: warning: implicit declaration of function `printf'
C:\dev\hello\main.c:66: error: `fichier' undeclared (first use in this function)
C:\dev\hello\main.c:70: warning: implicit declaration of function `fgetc'
C:\dev\hello\main.c:90: error: `EOF' undeclared (first use in this function)
C:\dev\hello\main.c:91: warning: implicit declaration of function `fclose'
C:\dev\hello\main.c:92: warning: implicit declaration of function `sleep'
C:\dev\hello\main.c:108: warning: implicit declaration of function `fossil_writeblock'
C:\dev\hello\main.c:26: warning: unused variable `PtrStartBufferInverse'
C:\dev\hello\main.c:31: warning: unused variable `temp'
Process terminated with status 1 (0 minutes, 0 seconds)
6 errors, 9 warnings


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1892370
Moiii9
Posté le 08-06-2009 à 08:22:24  profilanswer
 

enfaie j'ai les 3 colones de tout à droite de l'image qui s'affichent tout a gauche ...
 
 
 
Colones :
125,126,127,0,1,2,3,4,5,6,7,8,9,.....,124
 
 
Désolé, voilà le code complet :
 

Code :
  1. /*
  2. * Alm
  3. *     uServer
  4. *     bmp.c
  5. */
  6. #include <stdio.h>;
  7. #include <stdlib.h>;
  8. #include <FOSSIL.H>
  9. #include "fonctions.h";
  10. int main(void)
  11. {
  12.      FILE *fichierImage;
  13.      fichierImage = fopen("test.bmp", "rb" );
  14.      ClearScreen();
  15.      LireBmpParPixel(fichierImage);
  16.      return 0;
  17. }


 
 
 
 
 
 
 
 

Code :
  1. /*
  2. * Alm
  3. *     uServer
  4. *     Fonctions.h  
  5. */
  6. void LireBmpParPixel(FILE *fichier); // Affiche une image bmp de 5r 6v 5b de 128*128 65k couleur sur un ulcd 4D system
  7. int Initialize(void);     // Initialise le driver fossil
  8. void ClearScreen(void);       // Efface tout l'écran
  9. void LcdPowerUp(void);        // Démarre l'écran
  10. void LcdPowerDown(void);       // arrête l'écran
  11. void LcdIntensitee(int intensitee); // Définie l'intensitée lumineuse de l'écran
  12. void SetContraste(int b);
  13. void DisplayState(int b);      // L'état de l'écran allumé, ou éteint
  14. unsigned char far *buffer[10];
  15. /*
  16. *
  17. * Affiche une image bmp de 5r 6v 5b de 128*128 65k couleur sur un ulcd 4D system
  18. *
  19. * Paramètre:
  20. *      FILE *fichierImage;
  21. *      fichierImage = fopen("PictureName.bmp", "rb" );
  22. *
  23. * returns:
  24. *  4 printf du nombre de données envoyées
  25. *
  26. * Remarque(s)
  27. *  entre l'envoie des données et l'affichage sur le uLcd, s'écoulent quelques secondes
  28. */
  29. #define U 32774
  30. void LireBmpParPixel(FILE *fichier)
  31. {
  32. unsigned char *buffer;
  33. unsigned char *bufferTemp;
  34. unsigned char *PtrStartBuffer;
  35. unsigned char *PtrStartBufferTemp;
  36. unsigned char *PtrBufferInverse;
  37. unsigned char *PtrStartBufferInverse;
  38. int caractereActuel;
  39. int caractereActuel2;
  40. long i =0;
  41. long temp=0;
  42. int caractenv=0;
  43. buffer =(unsigned char *) malloc(U);
  44. bufferTemp =(unsigned char *) malloc(U);
  45. PtrBufferInverse =(unsigned char *) malloc(U);
  46.    if(buffer == NULL || bufferTemp == NULL || PtrBufferInverse == NULL)
  47.     printf("Erreur allocation mémoire ..." );
  48.    else
  49.    {
  50.         // Ajoute     I  0  0  128  128  1  (puis toute l'image)
  51.         // I (La commande)
  52.         // 0 (Position début de l image en x )
  53.         // 0 (Position début de l image en y )
  54.         // 128 (Taille horizontale de l'image)
  55.         // 128 (Taille verticale de l'image)
  56.         // 1 (Pour préciser que c'est en 65k couleur et non en 256 couleur)
  57.   PtrStartBuffer = buffer;
  58.   *PtrStartBuffer = 'I';
  59.   PtrStartBuffer++;
  60.   *PtrStartBuffer = (char)0;
  61.   PtrStartBuffer++;
  62.   *PtrStartBuffer = (char)0;
  63.   PtrStartBuffer++;
  64.   *PtrStartBuffer = (unsigned char)128;
  65.   PtrStartBuffer++;
  66.   *PtrStartBuffer = (unsigned char)128;
  67.   PtrStartBuffer++;
  68.   *PtrStartBuffer = (char)1;
  69.   PtrStartBuffer++;
  70.    }
  71. PtrStartBuffer = PtrStartBuffer+(32768);  // on se place a la fin du buffer
  72. if(fichier != NULL)
  73. {
  74. do
  75. {
  76.  caractereActuel = fgetc(fichier); // On lit le caractère
  77.  caractereActuel2 = fgetc(fichier); // On lit le caractère suivant
  78.  if(i>34) // on saute le header de l'image
  79.    {
  80.   if(i==35)
  81.    {
  82.     caractereActuel = fgetc(fichier);
  83.     caractereActuel2 = fgetc(fichier);
  84.    }
  85.   if(i<16422)//  on remplie le buffer depuis la fin vu que les données du bmp sont à l'envers
  86.           {
  87.      *PtrStartBuffer = (unsigned char) caractereActuel2;
  88.      PtrStartBuffer--;
  89.      *PtrStartBuffer = (unsigned char) caractereActuel;
  90.      PtrStartBuffer--;
  91.    }// fin i<32843
  92.   }-//fin i >35
  93.  i++;
  94. } while (caractereActuel != EOF); // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
  95. fclose(fichier); //ferme le fichier
  96. sleep(1); // temps d'attente sinon la transmission ne s'effectue pas
  97.    PtrStartBuffer=buffer;
  98.    PtrStartBufferTemp=bufferTemp;
  99.    i=0;
  100. while(i<=32774)       //32768
  101.     {
  102.          *PtrStartBufferTemp=*PtrStartBuffer;
  103.               if((i%10240==0 ||i==32774) && i!=0)
  104.               {
  105.                  if(i==32774)
  106.                    caractenv=2054;
  107.                  else
  108.                    caractenv=10240;
  109.            printf("\nNbre de données envoyer : %d \n",fossil_writeblock(1,bufferTemp,caractenv));
  110.                  if(i!=32774)
  111.                  sleep(7); // temps d'attente afin que les 10240 données soir traiter par le ulcd de 4d systems
  112.                  *bufferTemp=NULL;
  113.                  PtrStartBufferTemp=bufferTemp;
  114.            }
  115.              PtrStartBuffer++;
  116.              PtrStartBufferTemp++;
  117.              i++;
  118.     }
  119. }
  120. else
  121. printf("Erreur de lecture de fichier" );
  122. printf("\nFin d'execution\n" );
  123. return;
  124. }
  125. /*****************************************************
  126. ******************************************************/
  127. /*
  128. * Initialise le driver fossil
  129. *
  130. * returns:
  131. *  1 en cas d'erreur
  132. *  0 si tout s'est déroulé correctememt
  133. *
  134. * Remarque(s)
  135. *  A utiliser qu'une fois
  136. *
  137. */
  138. int Initialize(void)
  139. {
  140.    fossil_init(1);
  141. fossil_putbyte(1,'U');
  142.    if(fossil_getbyte_wait(1)==6)
  143.  return 0;
  144.    else
  145.     return 1;
  146. }
  147. /*****************************************************
  148. ******************************************************/
  149. /*
  150. * Démarre l'écran
  151. */
  152. void LcdPowerUp(void)
  153. {
  154.    sprintf(buffer,"%c%c%c",'Y',3,1);
  155.    fossil_writeblock(1,buffer,3);
  156.     return;
  157. }
  158. /*****************************************************
  159. ******************************************************/
  160. /*
  161. * arrête l'écran
  162. */
  163. void LcdPowerDown(void)
  164. {
  165.    sprintf(buffer,"%c%c%c",'Y',3,0);
  166.  fossil_writeblock(1,buffer,3);
  167.     return;
  168. }
  169. /*****************************************************
  170. ******************************************************/
  171. /*
  172. * Efface tout l'écran
  173. */
  174. void ClearScreen(void)
  175. {
  176. fossil_putbyte(1,'E');
  177.    return;
  178. }
  179. /*****************************************************
  180. ******************************************************/
  181. /*
  182. * Définie l'intensitée lumineuse de l'écran
  183. *
  184. * buffer 'Y',0,(paramètre)
  185. *
  186. * paramètres:
  187. * - int intensitee -
  188. *  0 => off
  189. *  1 => intensitée normal (par défaut)
  190. *  2 => intensitée élevée
  191. *
  192. */
  193. void LcdIntensitee(int intensitee)
  194. {
  195. sprintf(buffer,"%c%c%c",'Y',0,intensitee);
  196.  fossil_writeblock(1,buffer,3);
  197.    return;
  198. }
  199. /*****************************************************
  200. ******************************************************/
  201. /*
  202. *   écran allumé ou éteind
  203. *
  204. * Paramètres:
  205. *   - int b -
  206. *   1 => écran allumé
  207. *   0 => écran éteint
  208. *
  209. */
  210. void DisplayContraste(int b)
  211. {
  212.  sprintf(buffer,"%c%c%c",'Y',1,b);
  213.       fossil_writeblock(1,buffer,3);
  214.    return;
  215. }
  216. /*****************************************************
  217. ******************************************************/
  218. /*
  219. * Le contraste de l'écran
  220. *
  221. * buffer,'Y',2,(param)
  222. * Paramètres:
  223. *
  224. *   0 => contraste min
  225. *   40 => contraste max
  226. *
  227. */
  228. void SetContraste(int b)
  229. {
  230.  sprintf(buffer,"%c%c%c",'Y',2,b);
  231.       fossil_writeblock(1,buffer,3);
  232.    return;
  233. }


Message édité par Moiii9 le 08-06-2009 à 08:25:03
n°1894336
Moiii9
Posté le 12-06-2009 à 08:44:20  profilanswer
 

Fonction mise à jour ... ^^

 


ET FONCTIONNE !

  


Code :
  1. /*
  2. *
  3. * Affiche une image bmp de 5r 6v 5b de 128*128 65k couleur sur un ulcd 4D system
  4. *
  5. * Paramètre:
  6. *      FILE *fichierImage;
  7. *      fichierImage = fopen("PictureName.bmp", "rb" );
  8. *
  9. * returns:
  10. *  4 printf du nombre de données envoyées
  11. *
  12. * Remarque(s)
  13. *  entre l'envoie des données et l'affichage sur le uLcd, s'écoulent quelques secondes
  14. */
  15. #define U 32774
  16. void LireBmpParPixel(FILE *fichier)
  17. {
  18. unsigned char *buffer;
  19. unsigned char *bufferTemp;
  20. unsigned char *PtrAddrTemp;
  21. unsigned char *PtrStartBuffer;
  22. unsigned char *PtrBufferMirror;
  23. unsigned char *PtrStartBufferTemp;
  24. unsigned char *PtrStartBufferMirror;
  25. long i=0;
  26. long j=0;
  27. long k=0;
  28. long temp=0;
  29. int caractenv=0;
  30. int caractereActuel;
  31. int caractereActuel2;
  32. if(fichier != NULL)
  33. {
  34. buffer =(unsigned char *) malloc(U);
  35. bufferTemp =(unsigned char *) malloc(U);
  36. PtrBufferMirror=(unsigned char *) malloc(U);
  37. if(buffer == NULL || bufferTemp == NULL || PtrBufferMirror == NULL )
  38.  printf("Erreur allocation mémoire ..." );
  39. else
  40. {
  41.         /*/
  42.  /  Ajoute     I  0  0  128  128  1
  43.         /  I (La commande)
  44.         /  0 (Position début de l image en x )
  45.         /  0 (Position début de l image en y )
  46.         /  128 (Taille horizontale de l'image)
  47.         /  128 (Taille verticale de l'image)
  48.         /  1 (Pour préciser que c'est en 65k couleur et non en 256 couleur)
  49.  /*/
  50.   PtrStartBuffer = buffer;
  51.   *PtrStartBuffer = 'I';
  52.   PtrStartBuffer++;
  53.   *PtrStartBuffer = (char)0;
  54.   PtrStartBuffer++;
  55.   *PtrStartBuffer = (char)0;
  56.   PtrStartBuffer++;
  57.   *PtrStartBuffer = (unsigned char)128;
  58.   PtrStartBuffer++;
  59.   *PtrStartBuffer = (unsigned char)128;
  60.   PtrStartBuffer++;
  61.   *PtrStartBuffer = (char)1;
  62.   PtrStartBuffer++;
  63. }
  64. PtrStartBuffer = PtrStartBuffer+(32768);  // on se place a la fin du buffer
  65. do
  66. {
  67.  if(i>67) //67// on saute le header de l'image
  68.  {
  69.   caractereActuel = fgetc(fichier);
  70.   caractereActuel2 = fgetc(fichier);
  71.   if(i==68)  //68
  72.   {
  73.    caractereActuel = fgetc(fichier);
  74.    caractereActuel2 = fgetc(fichier);
  75.   }
  76.   if(i<16450)//  on remplie le buffer depuis la fin vu que les données du bmp sont à l'envers
  77.   {
  78.    *PtrStartBuffer = (unsigned char) caractereActuel2;
  79.    PtrStartBuffer--;
  80.    *PtrStartBuffer = (unsigned char) caractereActuel;
  81.    PtrStartBuffer--;
  82.   }// fin i<16450
  83.  }//fin i >67
  84.  else
  85.  caractereActuel = fgetc(fichier); // On lit le caractère
  86.  i++;
  87. } while (caractereActuel != EOF); // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
  88. fclose(fichier); //ferme le fichier
  89. i=0;
  90. k=0;
  91. j=1;
  92. PtrStartBuffer=buffer;
  93. PtrStartBufferMirror = PtrBufferMirror;
  94. while(k<16387)//16387
  95. {
  96.  if(k<=5)
  97.  {
  98.   *PtrStartBufferMirror=*PtrStartBuffer;
  99.   PtrStartBufferMirror++;
  100.  }
  101.  else
  102.  {
  103.   if(i%128 == 0 || k==6 )
  104.   {
  105.    if(k==6)
  106.     PtrAddrTemp=PtrStartBufferMirror;
  107.    PtrStartBufferMirror=PtrAddrTemp+(256*j);
  108.    j++;
  109.   }
  110.   caractereActuel=*PtrStartBuffer;
  111.   PtrStartBuffer++;
  112.   caractereActuel2=*PtrStartBuffer;
  113.   *PtrStartBufferMirror=caractereActuel;
  114.   PtrStartBufferMirror--;
  115.   *PtrStartBufferMirror=caractereActuel2;
  116.   PtrStartBufferMirror--;
  117.   i++;
  118.  }
  119.  PtrStartBuffer++;
  120.  k++;
  121. }
  122. PtrStartBuffer=PtrBufferMirror;
  123. PtrStartBufferTemp=bufferTemp;
  124. i=0;
  125. while(i<=32774)
  126. {
  127.  if((i%10240==0 ||i==32774) && i!=0)
  128.  {
  129.   if(i==32774)
  130.    caractenv=2054;
  131.   else
  132.    caractenv=10240;
  133.   printf("\nNbre de données envoyer : %d \n",fossil_writeblock(1,bufferTemp,caractenv));
  134.   if(i!=32774)
  135.   sleep(7); // temps d'attente afin que les 10240 données soir traiter par le ulcd de 4d systems
  136.   *bufferTemp=NULL;
  137.   PtrStartBufferTemp=bufferTemp;
  138.  }
  139.  *PtrStartBufferTemp=*PtrStartBuffer;
  140.  PtrStartBuffer++;
  141.  PtrStartBufferTemp++;
  142.  i++;
  143. }//fin while i<=32774
  144. } // FIN fichier != NULL
  145. else
  146. printf("Erreur de lecture de fichier" );
  147. /*
  148. * Désallocation des mémoire
  149. */
  150. free(buffer);
  151. free(bufferTemp);
  152. free(PtrBufferMirror);
  153. printf("\nFin d'execution\n" );
  154. return;
  155. }
  156. /*****************************************************
  157. ******************************************************/
 


Message édité par Moiii9 le 22-06-2009 à 11:08:08

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Image ne s'affiche pas correctement sur un LCD

 

Sujets relatifs
Tableau qui ne s'affiche pasSuppression auto des commentaires C/C++
[C#] Communication WCF entre Silverlight 2 et LinqToSQLdécalage du curseur (voir image)
[C] Ecriture/lecture de float dans un fichierRecupérer texte d'une zone de texte, sur une image
[javascript|jquery] affichage dynamique d'une image ds un divinserer une image
Rajouter une image sur l'animation[C]renverser une liste chainée
Plus de sujets relatifs à : [C] Image ne s'affiche pas correctement sur un LCD


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR