Versuche, eine JPEG-Datei aus einigen Rohdaten mit libjpeg zu schreiben.schreibe ein JPEG mit libjpeg (seg fault)
Es löst einen Segmentation Fault in jpeg_start_compress()
Hier ist der relevante Teil des Codes:
void write_sub_image(char *filename, int start, int end)
{
struct jpeg_compress_struct cinfo;
unsigned char *stride;
JSAMPROW row_pointer[1];
unsigned long new_width = end-start;
int i;
FILE *fp;
stride = (unsigned char *)malloc(new_width * 3);
fp = fopen(filename, "w+");
jpeg_create_compress(&cinfo);
jpeg_stdio_dest(&cinfo, fp);
cinfo.image_width = new_width;
cinfo.image_height = height;
cinfo.input_components = 3;
cinfo.in_color_space = JCS_RGB;
jpeg_set_defaults(&cinfo);
jpeg_start_compress(&cinfo, FALSE);
for (i=0; i<height; i++) {
memcpy (stride, image + (start + i * width) * 3, new_width * 3);
row_pointer[0] = stride;
jpeg_write_scanlines(&cinfo, &stride, 1);
}
jpeg_finish_compress(&cinfo);
jpeg_destroy_compress(&cinfo);
fclose(fp);
}
Das Problem ist nicht mit dem Memcpy ist, ist es nicht einmal für Schleife die bekommen .. stürzt einfach bei _start_compress ab.
Falls das relevant ist, ist das System Ubuntu 10.10.
Haben Sie überprüft, dass '' new_width' und height' gültig sind (d> 0)? – OrangeDog
In der Tat kann das nicht der ganze Code sein, da 'height' nicht deklariert wird. – OrangeDog
es ist draußen erklärt, das ist Teil eines größeren Codes, sollte aber ein Stück sein, das von selbst funktionieren kann. Ich habe überprüft und new_width = 96 und Höhe = 200 in meinem Test. – Matthieu