From 44500d28e64da1f2a9a01b34ca65f90f04f0c29c Mon Sep 17 00:00:00 2001 From: Riccardo Mottola Date: Wed, 21 May 2014 14:52:09 +0000 Subject: [PATCH] Transform 0..255 compression factor to 0..1 quality to match Cocoa specs git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@37898 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 6 ++++++ Source/NSBitmapImageRep+JPEG.m | 7 ++++--- Source/NSBitmapImageRep.m | 16 ++++++++-------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7b12d7a17..4095d3e97 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2014-05-21 Riccardo Mottola + + * Source/NSBitmapImageRep+JPEG.m + * Source/NSBitmapImageRep.m + Transform 0..255 compression factor to 0..1 quality to match Cocoa specs. + 2014-05-04 Ivan Vucica * Tests/GNUmakefile: Don't fail if 'gnustep-tests --clean' fails. diff --git a/Source/NSBitmapImageRep+JPEG.m b/Source/NSBitmapImageRep+JPEG.m index af87e3734..70a1b40c1 100644 --- a/Source/NSBitmapImageRep+JPEG.m +++ b/Source/NSBitmapImageRep+JPEG.m @@ -2,7 +2,7 @@ Methods for reading jpeg images - Copyright (C) 2003-2010 Free Software Foundation, Inc. + Copyright (C) 2003-2014 Free Software Foundation, Inc. Written by: Stefan Kleine Stegemann Date: Nov 2003 @@ -600,11 +600,12 @@ static void gs_jpeg_memory_dest_destroy (j_compress_ptr cinfo) jpeg_set_defaults (&cinfo); // set quality - + // we expect a value between 0..1, 0 being lowest, 1 highest quality + qualityNumber = [properties objectForKey: NSImageCompressionFactor]; if (qualityNumber != nil) { - quality = (int) ((1-[qualityNumber floatValue] / 255.0) * 100.0); + quality = (int) ([qualityNumber floatValue] * 100.0); } // set progressive mode diff --git a/Source/NSBitmapImageRep.m b/Source/NSBitmapImageRep.m index 2a3bf78f5..d93eb41bd 100644 --- a/Source/NSBitmapImageRep.m +++ b/Source/NSBitmapImageRep.m @@ -2,7 +2,7 @@ Bitmap image representation. - Copyright (C) 1996, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 1996-2014 Free Software Foundation, Inc. Author: Adam Fedor Date: Feb 1996 @@ -1498,9 +1498,9 @@ _set_bit_value(unsigned char *base, long msb_off, int bit_width, info.compression = [NSBitmapImageRep _localFromCompressionType: type]; if (factor < 0) factor = 0; - if (factor > 255) - factor = 255; - info.quality = (1 - ((float)factor)/255.0) * 100; + if (factor > 1) + factor = 1; + info.quality = factor * 100; info.numImages = 1; info.error = 0; @@ -1685,8 +1685,8 @@ _set_bit_value(unsigned char *base, long msb_off, int bit_width, /** Returns the receivers compression and compression factor, which is set either when the image is read in or by -setCompression:factor:. Factor is ignored in many compression schemes. For JPEG compression, - factor can be any value from 0 to 255, with 255 being the maximum - compression. */ + factor can be any value from 0 to 1, with 1 being the maximum + quality. */ - (void) getCompression: (NSTIFFCompression*)compression factor: (float*)factor { @@ -1712,7 +1712,7 @@ _set_bit_value(unsigned char *base, long msb_off, int bit_width, NSImageCompressionMethod NSNumber; automatically set when reading TIFF data; writing TIFF data NSImageCompressionFactor - NSNumber 0.0 to 255.0; writing JPEG data + NSNumber 0.0 to 1.0; writing JPEG data (GNUstep extension: JPEG-compressed TIFFs too) NSImageProgressive NSNumber boolean; automatically set when reading JPEG data; writing JPEG data. @@ -1911,7 +1911,7 @@ _set_bit_value(unsigned char *base, long msb_off, int bit_width, bytesPerRow: 0 bitsPerPixel: 0]; _compression = [NSBitmapImageRep _compressionTypeFromLocal: info->compression]; - _comp_factor = 255 * (1 - ((float)info->quality)/100.0); + _comp_factor = (((float)info->quality)/100.0); // Note that Cocoa does not do this, even though the docs say it should [_properties setObject: [NSNumber numberWithUnsignedShort: _compression]