Public feed #726716

rvsjoen

public c v1 · immutable
Raw Edit
·published 2007-10-05 13:25 UTC
rendered paste body
#include <cstdio>#include "include/jpeglib.h"#include "util_graphics.h"unsigned char *loadJPEG(char *filename, unsigned int  *w, unsigned int  *h, unsigned int *components) {		struct jpeg_decompress_struct cinfo;	struct jpeg_error_mgr jerr;	FILE * infile;	unsigned char *buffer, *ptr;	unsigned int nval;	cinfo.err = jpeg_std_error(&jerr);	jpeg_create_decompress(&cinfo);		if ((infile = fopen(filename, "rb")) == NULL) {		fprintf(stderr, "Can't open '%s'\n", filename);		jpeg_destroy_decompress(&cinfo);		return NULL;	}	jpeg_stdio_src(&cinfo, infile);	jpeg_read_header(&cinfo, TRUE);	jpeg_start_decompress(&cinfo);	*w = cinfo.output_width;	*h = cinfo.output_height;	*components = cinfo.output_components;	nval = cinfo.output_width * cinfo.output_components * cinfo.output_height;	buffer = (unsigned char *)malloc(sizeof(unsigned char) * nval);	if (!buffer) {		fprintf(stderr, "Unable to process, out of memory\n");		jpeg_finish_decompress(&cinfo);		jpeg_destroy_decompress(&cinfo);		fclose(infile);		return NULL;	}	ptr = buffer +	(cinfo.output_width * cinfo.output_components) * (cinfo.output_height - 1);	while (cinfo.output_scanline < cinfo.output_height) {		jpeg_read_scanlines(&cinfo, &ptr, 1);		ptr -= cinfo.output_width * cinfo.output_components;	}	jpeg_finish_decompress(&cinfo);	jpeg_destroy_decompress(&cinfo);	fclose(infile);	return buffer;}