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

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