5 #include "TeLibJpeg\jmemdstsrc.h" 9 struct jpeg_error_mgr
pub;
14 struct jpeg_decompress_struct cinfo;
19 cinfo.err = jpeg_std_error(&jerr.
pub);
20 jpeg_create_decompress(&cinfo);
22 j_mem_src(&cinfo, srcbuf, srclen);
25 jpeg_read_header(&cinfo, TRUE);
27 jpeg_start_decompress(&cinfo);
28 row_stride = cinfo.output_width * cinfo.output_components;
30 buffer = (*cinfo.mem->alloc_sarray) ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
32 *width = cinfo.output_width;
33 *height = cinfo.output_height;
34 *data =
new uchar[cinfo.output_width*cinfo.output_height];
45 while (cinfo.output_scanline < cinfo.output_height) {
50 jpeg_read_scanlines(&cinfo, buffer, 1);
53 unsigned char* src = buffer[0];
54 if (cinfo.output_components == 1) {
55 memcpy(dst, src, cinfo.output_width);
57 for (
uint x=0;x<cinfo.output_width;x++)
58 dst[x] = src[x * cinfo.output_components];
60 dst += cinfo.output_width;
64 jpeg_finish_decompress(&cinfo);
72 jpeg_destroy_decompress(&cinfo);
97 struct jpeg_compress_struct cinfo;
106 struct jpeg_error_mgr jerr;
108 JSAMPROW row_pointer[1];
118 cinfo.err = jpeg_std_error(&jerr);
120 jpeg_create_compress(&cinfo);
127 j_mem_dest(&cinfo, (
void**)&memBuf, &len);
135 cinfo.image_width = w;
136 cinfo.image_height = h;
137 cinfo.input_components = 1;
138 cinfo.in_color_space = JCS_GRAYSCALE;
143 jpeg_set_defaults(&cinfo);
147 jpeg_set_quality(&cinfo, quality, TRUE );
154 jpeg_start_compress(&cinfo, TRUE);
166 while (cinfo.next_scanline < cinfo.image_height) {
171 row_pointer[0] = &data[cinfo.next_scanline * row_stride];
172 (void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
174 jpeg_finish_compress(&cinfo);
175 jpeg_destroy_compress(&cinfo);
178 FILE *f = fopen(filename,
"wb");
180 fwrite(memBuf, 1, len, f);
183 dbgprintf(
"Failed to open file %s for writing\n", filename);
struct jpeg_error_mgr pub
void floatToNormalizedInt(T *dst, const float *src, uint w, uint h, T maxValue)
void WriteJPEGFile(uchar *data, int w, int h, const char *filename, int quality)
int ReadJPEGFile(uchar *srcbuf, int srclen, uchar **data, int *width, int *height)
void dbgprintf(const char *fmt,...)
void FloatToJPEGFile(const char *name, const float *d, int w, int h)