Mercurial > hg > minimon
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 7:5c00b239e1c8 | 8:66c77f9ba9b9 |
|---|---|
| 90 | 90 |
| 91 dest->pub.next_output_byte = dest->buffer = *outbuffer; | 91 dest->pub.next_output_byte = dest->buffer = *outbuffer; |
| 92 dest->pub.free_in_buffer = dest->bufsize = *outsize; | 92 dest->pub.free_in_buffer = dest->bufsize = *outsize; |
| 93 } | 93 } |
| 94 | 94 |
| 95 static void convert_rgba_to_rgb(unsigned char *buf, unsigned char *fb_mem, int width) { | |
| 96 int i; | |
| 97 for (i = 0; i < width; i++) { | |
| 98 *buf++ = *fb_mem++; | |
| 99 *buf++ = *fb_mem++; | |
| 100 *buf++ = *fb_mem++; | |
| 101 fb_mem++; | |
| 102 } | |
| 103 } | |
| 95 | 104 |
| 96 | 105 jpg_buf_t build_jpg_from_fb(unsigned char *fb_mem, int width, int height, int bits_per_pixel) { |
| 97 jpg_buf_t build_jpg_from_fb(int fb, int width, int height) { | |
| 98 int scanline; | 106 int scanline; |
| 99 struct jpeg_compress_struct cinfo; | 107 struct jpeg_compress_struct cinfo; |
| 100 struct jpeg_error_mgr jerr; | 108 struct jpeg_error_mgr jerr; |
| 101 | 109 |
| 102 cinfo.err = jpeg_std_error(&jerr); | 110 cinfo.err = jpeg_std_error(&jerr); |
| 114 cinfo.in_color_space = JCS_RGB; | 122 cinfo.in_color_space = JCS_RGB; |
| 115 jpeg_set_defaults(&cinfo); | 123 jpeg_set_defaults(&cinfo); |
| 116 | 124 |
| 117 jpeg_start_compress(&cinfo, TRUE); | 125 jpeg_start_compress(&cinfo, TRUE); |
| 118 | 126 |
| 119 JSAMPLE *buf = malloc(width * 4); | 127 JSAMPLE *buf = (JSAMPLE *) malloc(width * 3); |
| 120 JSAMPROW row_ptr[1]; | 128 JSAMPROW row_ptr[1] = {buf}; |
| 121 row_ptr[0] = buf; | |
| 122 for (scanline = 0; scanline < height; scanline++) { | 129 for (scanline = 0; scanline < height; scanline++) { |
| 123 read(fb, buf, width*4); | 130 convert_rgba_to_rgb(buf, &fb_mem[scanline * width * 4], width); |
| 124 jpeg_write_scanlines(&cinfo, row_ptr, 1); | 131 jpeg_write_scanlines(&cinfo, row_ptr, 1); |
| 125 } | 132 } |
| 126 free(buf); | 133 free(buf); |
| 127 | 134 |
| 128 jpeg_finish_compress(&cinfo); | 135 jpeg_finish_compress(&cinfo); |
