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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.