PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : libjpeg macht mich wahnsinnig



brotzi
28-06-2004, 15:10
Hallo alle zusammen,

ich habe hier ein kleines Programm geschrieben, welches fltk benutzt. Das funktioniert auch ganz prima. Nun wollte ich die Möglichkeit einbauen jpeg-Bilder zu schreiben. Die Klassen, die fltk anbietet können aber jpeg nur lesen. Also habe ich mir gedacht, einfach die libjpeg einzubauen. Dazu habe ich aus einem Beispiel einfach den Code kopiert:


#include <jpeglib.h>

GLOBAL(void)
write_JPEG_file (char * filename, int quality, JSAMPLE * image_buffer, int image_width, int image_height){
//snip: code from jpeglib/example.c
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;
FILE * outfile; /* target file */
JSAMPROW row_pointer[1];/* pointer to JSAMPLE row[s] */
int row_stride; /* physical row width in image buffer */
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_compress(&cinfo);
if ((outfile = fopen(filename, "wb")) == NULL) {
fprintf(stderr, "can't open %s\n", filename);
jpeg_destroy_compress(&cinfo);
return;
}
jpeg_stdio_dest(&cinfo, outfile);
cinfo.image_width = image_width; /* image width and height, in pixels */
cinfo.image_height = image_height;
cinfo.input_components = 3; /* # of color components per pixel */
cinfo.in_color_space = JCS_RGB; /* colorspace of input image */
jpeg_set_defaults(&cinfo);
jpeg_set_quality(&cinfo, 90, true /* limit to baseline-JPEG values */);
jpeg_start_compress(&cinfo, true);
row_stride = image_width * 3; /* JSAMPLEs per row in image_buffer */
while (cinfo.next_scanline < cinfo.image_height) {
row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride];
(void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
}
jpeg_finish_compress(&cinfo);
fclose(outfile);
jpeg_destroy_compress(&cinfo);
//snap
}


Das compiliert auch ganz prima. Beim Linken habe ich dann aber massenweise undefinierte Referenzen ala:
undefined reference to `jpeg_std_error(jpeg_error_mgr*)'

...und das obwohl ich mit g++ -ljpeg ... linke.
Hat jemand von euch schonmal so ein Problem gehabt und eine mögliche Lösung dafür???

brotzi
29-06-2004, 22:27
Falls jemand von euch mal auf ein ähnliches Problem stossen sollte: Heureka ich habs!

einfach mit:


extern "C"{
#include <jpeglib.h>
}

den Header einbinden und schon gehts.