Mercurial > hg > minimon
diff jpg.c @ 8:66c77f9ba9b9
convert rgba -> rgb
author | Peter Meerwald <pmeerw@pmeerw.net> |
---|---|
date | Sat, 14 May 2011 21:05:59 +0200 |
parents | 3819ecaf0f14 |
children | 078dc69945ad |
line wrap: on
line diff
--- a/jpg.c Tue May 10 19:22:13 2011 +0200 +++ b/jpg.c Sat May 14 21:05:59 2011 +0200 @@ -92,9 +92,17 @@ dest->pub.free_in_buffer = dest->bufsize = *outsize; } - +static void convert_rgba_to_rgb(unsigned char *buf, unsigned char *fb_mem, int width) { + int i; + for (i = 0; i < width; i++) { + *buf++ = *fb_mem++; + *buf++ = *fb_mem++; + *buf++ = *fb_mem++; + fb_mem++; + } +} -jpg_buf_t build_jpg_from_fb(int fb, int width, int height) { +jpg_buf_t build_jpg_from_fb(unsigned char *fb_mem, int width, int height, int bits_per_pixel) { int scanline; struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; @@ -116,11 +124,10 @@ jpeg_start_compress(&cinfo, TRUE); - JSAMPLE *buf = malloc(width * 4); - JSAMPROW row_ptr[1]; - row_ptr[0] = buf; + JSAMPLE *buf = (JSAMPLE *) malloc(width * 3); + JSAMPROW row_ptr[1] = {buf}; for (scanline = 0; scanline < height; scanline++) { - read(fb, buf, width*4); + convert_rgba_to_rgb(buf, &fb_mem[scanline * width * 4], width); jpeg_write_scanlines(&cinfo, row_ptr, 1); } free(buf);