Lire et écrire un fichier à partir d'une image JPEG C
Salut à tous,
Je suis en Licence Informatique en 2ème année.
Nous avons un projet à faire, nous devons lire et écrire un nouveau fichier à partir d'une image JPEG actuellement.
Il nous faut donc lire l'image récupérer les caractères dans un buffer (unsigned char*)malloc();, pour ensuite ouvrir et créer un nouveau fichier JPEG et le réecrire sachant qu'ensuite on peut modifier des informations de l'image grace à la librairie jpeglib.h
J'ai une grosse partie du programme, mais je suis bloqué j'avais demandé de l'aide à mon chargé de TD/TP qui ma bien orienté, mais actuellement je ne sais pas si mon buffer est correcte ou non, et ensuite je dois l'appeler dans une fonction pour qu'il récupère le flux de caractère et je ne sais pas non plus si ceci est correcte.
Pour cela je vous transmet mon code pour une meilleur analyse ;) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
#include <stdio.h>
#include <stdlib.h>
#include <jpeglib.h>
#include <jerror.h>
#define TAILLE_MAX 10000
int main(int argc, char *argv[])
{
// Déclaration
unsigned char* buffer;
char chaine[TAILLE_MAX] = "";
int n, i, w, h, c, s;
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
w = 10;
h = 10;
c = 1;
buffer = (unsigned char*)malloc(n*sizeof(unsigned char));
FILE* image = NULL;
image = fopen(argv[1], "a+"); //(cf TP3) argv[1] à la place de "NomDeFichier"
if(image != NULL)
{
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);// Initialisation de la structure
jpeg_stdio_src(&cinfo,image); // file est de type FILE * (descripteur de fichier sur le fichier jpega decompresser)
jpeg_read_header(&cinfo,TRUE);// lecture des infos sur l'image jpeg
jpeg_start_decompress(&cinfo);// lancement du processus de */
while (n != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
{
//fgets(chaine, TAILLE_MAX, image) != NULL;
//printf("%s", chaine); // On affiche la chaîne qu'on vient de lire
buffer = (unsigned char*)malloc(n*sizeof(unsigned char));
for(i = 0; i <= n; i++)
{
jpeg_read_scanlines(&cinfo,&buffer,n);
}
}
jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
fclose(image); // On ferme le fichier
}
else
{
//On affiche un message d'erreur si on veut
printf("Impossible d'ouvrir le fichier\n");
}
struct jpeg_compress_struct cinfob;
struct jpeg_error_mgr jerrb;
FILE* imageb = NULL;
image = fopen(argv[2], "w"); //(cf TP3) argv[1] à la place de "NomDeFichier" // "/Dropbox/Public/UPJV/L2/C/Projet/new.jpg"
if(imageb != NULL)
{
cinfo.err = jpeg_std_error(&jerrb);
jpeg_create_compress(&cinfob); // Initialisation de la structure
jpeg_stdio_dest(&cinfob,imageb); // file est de type FILE * (descripteur de fichier
// sur le fichier jpeg compressé final)
cinfob.image_width=w; // nombre de pixel par ligne
cinfob.image_height=h; // nombre de ligne de l'image
cinfob.input_components=c; // 3 pour une image couleur, 1 pour une N&B
cinfob.in_color_space=s; // la constante JCS_RGB pour une image couleur ou
// JCS_GRAYSCALE pour une image N&B
jpeg_set_defaults(&cinfob); // initialisation des paramètres de compression
jpeg_start_compress(&cinfob,TRUE); // lancement du processus de decompression
while (n != NULL)
{
for(i = 0; i <= n; i++)
{
jpeg_write_scanlines(&cinfob,&buffer,n); // écriture des n lignes suivantes de l'image stockées dans le buffer (de type unsigned char *)
}
}
jpeg_finish_compress(&cinfob);
jpeg_destroy_compress(&cinfob);
fclose(imageb); // On ferme le fichier
}
else
{
//On affiche un message d'erreur si on veut
printf("Le fichier existe déjà\n");
}
free(buffer);
return 0;
}
//fgets(chaine, TAILLE_MAX, image) != NULL
// gcc main.c -o maincompile -ljpeg
// ./maincompile |
Ne faites pas attention à certaines chose telle que le define, c'était pour procéder par étapes notamment l'affichage des caractères de l'image, le but c'est de l'enlever une fois que j'aurai bien le buffer. Je ne peux pas procéder autrement nous sommes obliger d'utiliser un buffer et ce code là pour la librairie jpeg...
J'espère que vous pourrai vous aussi m'orienté ....
Merci bien, d'avance.