Bonjour à tous,

Très mauvais en langage c, j'essaye de créer une image jpg à l'aide de la librairie libjpeg

Je crée un tableau de "nblig" lignes et "nbcol*3" colonnes, pourquoi "nbcol*3" ? Car je range les valeurs de R, de G et de B à la suite on a donc 3 fois plus de colonnes que l'image que l'on souhaite obtenir.
Ensuite j'essaye d'utiliser libjpeg pour configurer et créer mon image jpeg.

Je n'ai aucun problème à compiler, mais lorsque je lance mon programme, j'obtiens l'erreur suivante :

Empty JPEG image (DNL not supported)
voici mon code (attention ça risque de vous piquer les yeux) :

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
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <jpeglib.h>
 
 
int main(void)
{
unsigned char R[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,131,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,251,247,243,239,235,231,227,223,219,215,211,207,203,199,195,191,187,183,179,175,171,167,163,159,155,151,147,143,139,135,131,128,};
unsigned char G[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,131,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,251,247,243,239,235,231,227,223,219,215,211,207,203,199,195,191,187,183,179,175,171,167,163,159,155,151,147,143,139,135,131,128,124,120,116,112,108,104,100,96,92,88,84,80,76,72,68,64,60,56,52,48,44,40,36,32,28,24,20,16,12,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};   
unsigned char B[]={131,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191,195,199,203,207,211,215,219,223,227,231,235,239,243,247,251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,251,247,243,239,235,231,227,223,219,215,211,207,203,199,195,191,187,183,179,175,171,167,163,159,155,151,147,143,139,135,131,128,124,120,116,112,108,104,100,96,92,88,84,80,76,72,68,64,60,56,52,48,44,40,36,32,28,24,20,16,12,8,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,};
unsigned char **mat;
int i=0, j=0, nblig=256, nbcol=256;
 
 
mat=malloc(nblig*sizeof(unsigned char*));
if (mat==NULL)
   {
   printf("erreur lors de l'allocation memoire de : mat\n");
   free(mat);
   mat=NULL;
   exit(EXIT_FAILURE);   
   }
else
   {
   for (i=0;i<nblig;i++)
      {
      mat[i]=malloc((nbcol*3)*sizeof(unsigned char*));
      if (mat[i]==NULL)
         {
         printf("erreur lors de l'allocation memoire de : mat[i]\n");
         for (j=0;j<i;j++)
            {
            free(mat[j]);
            mat[j]=NULL;
            }
         free(mat);
         mat=NULL;
         exit(EXIT_FAILURE);         
         }      
      }
   }
 
for (i=0;i<nblig;i++)
   {
   for (j=0;j<(nbcol*3);j=j+3)
      {
      mat[i][j]=R[i];
      mat[i][j+1]=G[i];
      mat[i][j+2]=B[i];
      }
   }
 
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr       jerr;
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_compress(&cinfo);
 
cinfo.image_width      = nblig;
cinfo.image_height     = nbcol;
cinfo.input_components = 3;
cinfo.in_color_space   = JCS_RGB;
 
FILE * outfile;
outfile = fopen("/home/flaherty/Bureau/hauteur_panache/test.jpeg", "wb");
if (outfile == NULL) {
   printf("can't open /home/flaherty/Bureau/hauteur_panache/test.jpeg\n");
   exit(1);
   }
jpeg_stdio_dest(&cinfo, outfile);
 
 
jpeg_start_compress(&cinfo, TRUE);
 
JSAMPROW row_pointer[1];      /
int row_stride;              
row_stride = nbcol * 3;   
while (cinfo.next_scanline < cinfo.image_height) {
   row_pointer[0] = mat[cinfo.next_scanline * row_stride];
   jpeg_write_scanlines(&cinfo, row_pointer, 1);
   }
 
jpeg_finish_compress(&cinfo);
 
 
}
Une idée sur ce qui coince ?