Hi everyone,
anyone here using IJG’s code together with SDL?
I have a strange problem:
For testing purposes I load a jpeg file into a SDL_Surface (SDL_Surface* srf
= IMG_Load_RW).
The file’s color depth is 24 bit.
After this step, I save the pixel data of the surface in another jpeg file
in the way it’s stated in example.c.
Unfortunately, this results mainly in garbage: the image has a tilt and is
gray (no, I didn’t want to make it a gray picture).
void saveJPG()
{
int height;
int width;
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;
FILE* outfile;
JSAMPROW row_pointer[1];
int row_stride;
SDL_Surface* srf = IMG_Load_RW("test.jpg", 1);
height = srf->h;
width = srf->w;
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_compress(&cinfo);
quality = 90;
if ((outfile = fopen(fileName, "wb")) == NULL) {
fprintf(stderr, "can't open %s\n", fileName);
exit(1);
}
jpeg_stdio_dest(&cinfo, outfile);
cinfo.image_width = width;
cinfo.image_height = height;
cinfo.input_components = 3;
cinfo.in_color_space = JCS_RGB;
jpeg_set_defaults(&cinfo);
jpeg_set_quality(&cinfo, colorDepth, TRUE);
jpeg_start_compress(&cinfo, TRUE);
row_stride = width * 3;
while (cinfo.next_scanline < cinfo.image_height)
{
row_pointer[0] = & ((Uint8*)srf->pixels)[cinfo.next_scanline *
row_stride];
(void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
}
jpeg_finish_compress(&cinfo);
fclose(outfile);
jpeg_destroy_compress(&cinfo);
}
What am I doing wrong? Please help!
Many thanks in advance!