Moiii9 | 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 :
- /*
- * Alm
- * uServer
- * bmp.c
- */
- #include <stdio.h>;
- #include <stdlib.h>;
- #include <FOSSIL.H>
- #include "fonctions.h";
- int main(void)
- {
- FILE *fichierImage;
- fichierImage = fopen("test.bmp", "rb" );
- ClearScreen();
- LireBmpParPixel(fichierImage);
- return 0;
- }
|
Code :
- /*
- * Alm
- * uServer
- * Fonctions.h
- */
- void LireBmpParPixel(FILE *fichier); // Affiche une image bmp de 5r 6v 5b de 128*128 65k couleur sur un ulcd 4D system
- int Initialize(void); // Initialise le driver fossil
- void ClearScreen(void); // Efface tout l'écran
- void LcdPowerUp(void); // Démarre l'écran
- void LcdPowerDown(void); // arrête l'écran
- void LcdIntensitee(int intensitee); // Définie l'intensitée lumineuse de l'écran
- void SetContraste(int b);
- void DisplayState(int b); // L'état de l'écran allumé, ou éteint
- unsigned char far *buffer[10];
- /*
- *
- * Affiche une image bmp de 5r 6v 5b de 128*128 65k couleur sur un ulcd 4D system
- *
- * Paramètre:
- * FILE *fichierImage;
- * fichierImage = fopen("PictureName.bmp", "rb" );
- *
- * returns:
- * 4 printf du nombre de données envoyées
- *
- * Remarque(s)
- * entre l'envoie des données et l'affichage sur le uLcd, s'écoulent quelques secondes
- */
- #define U 32774
- void LireBmpParPixel(FILE *fichier)
- {
- unsigned char *buffer;
- unsigned char *bufferTemp;
- unsigned char *PtrStartBuffer;
- unsigned char *PtrStartBufferTemp;
- unsigned char *PtrBufferInverse;
- unsigned char *PtrStartBufferInverse;
- int caractereActuel;
- int caractereActuel2;
- long i =0;
- long temp=0;
- int caractenv=0;
- buffer =(unsigned char *) malloc(U);
- bufferTemp =(unsigned char *) malloc(U);
- PtrBufferInverse =(unsigned char *) malloc(U);
- if(buffer == NULL || bufferTemp == NULL || PtrBufferInverse == NULL)
- printf("Erreur allocation mémoire ..." );
- else
- {
- // Ajoute I 0 0 128 128 1 (puis toute l'image)
- // I (La commande)
- // 0 (Position début de l image en x )
- // 0 (Position début de l image en y )
- // 128 (Taille horizontale de l'image)
- // 128 (Taille verticale de l'image)
- // 1 (Pour préciser que c'est en 65k couleur et non en 256 couleur)
- PtrStartBuffer = buffer;
- *PtrStartBuffer = 'I';
- PtrStartBuffer++;
- *PtrStartBuffer = (char)0;
- PtrStartBuffer++;
- *PtrStartBuffer = (char)0;
- PtrStartBuffer++;
- *PtrStartBuffer = (unsigned char)128;
- PtrStartBuffer++;
- *PtrStartBuffer = (unsigned char)128;
- PtrStartBuffer++;
- *PtrStartBuffer = (char)1;
- PtrStartBuffer++;
- }
- PtrStartBuffer = PtrStartBuffer+(32768); // on se place a la fin du buffer
- if(fichier != NULL)
- {
- do
- {
- caractereActuel = fgetc(fichier); // On lit le caractère
- caractereActuel2 = fgetc(fichier); // On lit le caractère suivant
- if(i>34) // on saute le header de l'image
- {
- if(i==35)
- {
- caractereActuel = fgetc(fichier);
- caractereActuel2 = fgetc(fichier);
- }
- if(i<16422)// on remplie le buffer depuis la fin vu que les données du bmp sont à l'envers
- {
- *PtrStartBuffer = (unsigned char) caractereActuel2;
- PtrStartBuffer--;
- *PtrStartBuffer = (unsigned char) caractereActuel;
- PtrStartBuffer--;
- }// fin i<32843
- }-//fin i >35
- i++;
- } while (caractereActuel != EOF); // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
- fclose(fichier); //ferme le fichier
- sleep(1); // temps d'attente sinon la transmission ne s'effectue pas
- PtrStartBuffer=buffer;
- PtrStartBufferTemp=bufferTemp;
- i=0;
- while(i<=32774) //32768
- {
- *PtrStartBufferTemp=*PtrStartBuffer;
- if((i%10240==0 ||i==32774) && i!=0)
- {
- if(i==32774)
- caractenv=2054;
- else
- caractenv=10240;
- printf("\nNbre de données envoyer : %d \n",fossil_writeblock(1,bufferTemp,caractenv));
- if(i!=32774)
- sleep(7); // temps d'attente afin que les 10240 données soir traiter par le ulcd de 4d systems
- *bufferTemp=NULL;
- PtrStartBufferTemp=bufferTemp;
- }
- PtrStartBuffer++;
- PtrStartBufferTemp++;
- i++;
- }
- }
- else
- printf("Erreur de lecture de fichier" );
- printf("\nFin d'execution\n" );
- return;
- }
- /*****************************************************
- ******************************************************/
- /*
- * Initialise le driver fossil
- *
- * returns:
- * 1 en cas d'erreur
- * 0 si tout s'est déroulé correctememt
- *
- * Remarque(s)
- * A utiliser qu'une fois
- *
- */
- int Initialize(void)
- {
- fossil_init(1);
- fossil_putbyte(1,'U');
- if(fossil_getbyte_wait(1)==6)
- return 0;
- else
- return 1;
- }
- /*****************************************************
- ******************************************************/
- /*
- * Démarre l'écran
- */
- void LcdPowerUp(void)
- {
- sprintf(buffer,"%c%c%c",'Y',3,1);
- fossil_writeblock(1,buffer,3);
- return;
- }
- /*****************************************************
- ******************************************************/
- /*
- * arrête l'écran
- */
- void LcdPowerDown(void)
- {
- sprintf(buffer,"%c%c%c",'Y',3,0);
- fossil_writeblock(1,buffer,3);
- return;
- }
- /*****************************************************
- ******************************************************/
- /*
- * Efface tout l'écran
- */
- void ClearScreen(void)
- {
- fossil_putbyte(1,'E');
- return;
- }
- /*****************************************************
- ******************************************************/
- /*
- * Définie l'intensitée lumineuse de l'écran
- *
- * buffer 'Y',0,(paramètre)
- *
- * paramètres:
- * - int intensitee -
- * 0 => off
- * 1 => intensitée normal (par défaut)
- * 2 => intensitée élevée
- *
- */
- void LcdIntensitee(int intensitee)
- {
- sprintf(buffer,"%c%c%c",'Y',0,intensitee);
- fossil_writeblock(1,buffer,3);
- return;
- }
- /*****************************************************
- ******************************************************/
- /*
- * écran allumé ou éteind
- *
- * Paramètres:
- * - int b -
- * 1 => écran allumé
- * 0 => écran éteint
- *
- */
- void DisplayContraste(int b)
- {
- sprintf(buffer,"%c%c%c",'Y',1,b);
- fossil_writeblock(1,buffer,3);
- return;
- }
- /*****************************************************
- ******************************************************/
- /*
- * Le contraste de l'écran
- *
- * buffer,'Y',2,(param)
- * Paramètres:
- *
- * 0 => contraste min
- * 40 => contraste max
- *
- */
- void SetContraste(int b)
- {
- sprintf(buffer,"%c%c%c",'Y',2,b);
- fossil_writeblock(1,buffer,3);
- return;
- }
|
Message édité par Moiii9 le 08-06-2009 à 08:25:03
|