X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Fjpeg.c;h=03a27376dd29c2e699d3e4a0597f4e55cc8f44d8;hp=d58215c27b0c49e6ef8f3e3a7ced0b2126aa895a;hb=5a4a20931aade60f0e99df0819fbd1c007a705da;hpb=6aed88dfdec745e702a15f44ea058a21342729a0 diff --git a/lib/jpeg.c b/lib/jpeg.c index d58215c..03a2737 100644 --- a/lib/jpeg.c +++ b/lib/jpeg.c @@ -76,7 +76,7 @@ static void mem_term_destination(j_compress_ptr cinfo) dmgr->free_in_buffer = 0; } -int jpeg_save(unsigned char*data, int width, int height, int quality, const char*filename) +int jpeg_save(unsigned char*data, unsigned width, unsigned height, int quality, const char*filename) { struct jpeg_destination_mgr mgr; struct jpeg_compress_struct cinfo; @@ -124,7 +124,46 @@ int jpeg_save(unsigned char*data, int width, int height, int quality, const char return 1; } -int jpeg_save_to_file(unsigned char*data, int width, int height, int quality, FILE*_fi) +int jpeg_save_gray(unsigned char*data, unsigned width, unsigned height, int quality, const char*filename) +{ + struct jpeg_destination_mgr mgr; + struct jpeg_compress_struct cinfo; + struct jpeg_error_mgr jerr; + + if(filename) fi = fopen(filename, "wb"); + else fi = 0; + + memset(&cinfo, 0, sizeof(cinfo)); + memset(&jerr, 0, sizeof(jerr)); + memset(&mgr, 0, sizeof(mgr)); + cinfo.err = jpeg_std_error(&jerr); + jpeg_create_compress(&cinfo); + + mgr.init_destination = file_init_destination; + mgr.empty_output_buffer = file_empty_output_buffer; + mgr.term_destination = file_term_destination; + cinfo.dest = &mgr; + cinfo.image_width = width; + cinfo.image_height = height; + cinfo.input_components = 1; + cinfo.in_color_space = JCS_GRAYSCALE; + jpeg_set_defaults(&cinfo); + jpeg_set_quality(&cinfo,quality,TRUE); + jpeg_start_compress(&cinfo, FALSE); + int t; + for(t=0;tsrc; - printf("skip %d +%d\n", size - mgr->bytes_in_buffer, num_bytes); + printf("skip %d +%ld\n", size - mgr->bytes_in_buffer, num_bytes); if(num_bytes<=0) return; mgr->next_input_byte += num_bytes; @@ -249,12 +288,11 @@ void mem_term_source (j_decompress_ptr cinfo) //printf("term %d\n", size - mgr->bytes_in_buffer); } -int jpeg_load_from_mem(unsigned char*_data, int _size, unsigned char*dest, int width, int height) +int jpeg_load_from_mem(unsigned char*_data, int _size, unsigned char**dest, unsigned*width, unsigned*height) { struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; struct jpeg_source_mgr mgr; - int y,x; data = _data; size = _size; @@ -273,12 +311,27 @@ int jpeg_load_from_mem(unsigned char*_data, int _size, unsigned char*dest, int w cinfo.src = &mgr; jpeg_read_header(&cinfo, TRUE); + cinfo.out_color_space == JCS_RGB; jpeg_start_decompress(&cinfo); + + *width = cinfo.output_width; + *height = cinfo.output_height; + *dest = malloc(cinfo.output_width * cinfo.output_height * 4); - for(y=0;y 0xffffffff) { + *_width = 0; + *_height = 0; + return 0; + } + *dest = (unsigned char*)malloc(image_size); int y; for (y=0;y