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);

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.