Author: tracy454
Date: Tue Nov 21 07:36:26 2006
New Revision: 24140
URL: http://svn.gna.org/viewcvs/gnustep?rev=24140&view=rev
Log:
Change Log
Mon. 20-Nov-2006 Mark Tracy <tracy454 at concentric dot net>
Many changes related to bitmap images
1. NSBitmapImateRep attribute global strings were not defined
Fix: add definitions to externs.h, and declarations to
NSBitmapImageRep.h
Comment: Two strings defined in Cocoa were commented out:
NSImageColorSyncData
is proprietary to Apple, and NSImageEXIFData has no support
elsewhere in
GNUstep. I propose adding GSImageICCProfileData if and when
color management
is added to GNUstep.
2. LZW compression in TIFF was disabled for lack of a test of its
availability
Fix: Implement NSTiffIsCodecConfigured(codec) in tiff.m
Comment: As of libtiff-3.7.0, there is a function call in the API
to test
availability at runtime. For libtiff-3.6.0 (earlier?) there are
macros
#defined in tiffconf.h. The implementation check the library
version at
compile time, and uses one of the two methods. I have not tested
the
second method for lack of an installation of an old libtiff.
3. -canCompressUsing: relied on a static list of capabilities
Fix: Use the new NSTiffIsCodecConfigured(codec) in
NSBitmapImageRep.m
Comment: The static list could be wrong, as it was on my system.
Also
eliminate the supports_lzw_compression flag.
4. +getTIFFCompressionTypes:count: relied on a static list of
compressors.
Fix: Use the new NSTiffIsCodecConfigured(codec) in
NSBitmapImageRep.m
Comment: Compares GNUstep supported compressors against actual
availability.
Also change the private instance methods
_localFromCompressionType and
_compressionTypeFromLocal to private class methods so that they
can be used
in -initWithTIFFImage:number: and
-TIFFRepresentationUsingCompression:factor:
and +getTIFFCompressionTypes:count: This is probably a clumsy
implementation
but it works.
5. -setProperty:toValue: and -valueForProperty: were not implemented
Fix: Add a new instance variable NSMutableDictionary * _properties
to
NSBitmapImageRep.h and implemented accessors in
NSBitmapImageRep.m. Patch
-_initFromTIFFImage to set compression type and factor in
_properties.
Comment: This feature is used to pass options to and from JPEG,
PNG, TIFF, and
GIF in Cocoa, although the docs are kind of vague. In one case
the Cocoa docs
said the properties were set when reading a TIFF, but the
implementation
didn't; I chose to implement the docs. Cocoa does use properties
when
exporting bitmaps, so I implemented that.
6. Checked and updated NSBitmapImageFileType in NSBitmapImageRep.h
Fix: confirmed the enumeration values against Cocoa, and added
NSJPEG2000FileType = 5
Comment: JPEG-2000 is not implemented, just reserved a space for
it.
7. -representationUsingType:properties: was not implemented
Fix: Implement export of TIFF, JPEG, GIF and PNG in NSBitmapImage.m
Comment: See the change notes for JPEG, GIF, and PNG for more. BMP
and JPEG-2000
are not implemented; they just log a message to that effect. As
apparently
Cocoa does it this way, if you pass nil for properties, it falls
back to
the internal _properties, and if that is empty, there are some
safe defaults.
8. +representationfOfImageRepsInArray:UsingType:properties: was not
implemented
Fix: Partially implement in NSBitmapImageRep.m
Comment: I just stole the incomplete code from
+TIFFRepresentationOfImageRepsInArray: since I have yet to find
an explanation
of how this really ought to work.
9. JPEG export didn't handle alpha channel, properties or errors.
Fix: Add -_JPEGRepresentationWithProperties:errorMessage: to
NSBitmapImageRep+JPEG.h and greatly rework Nicolas Roard's code
in
NSBitmapImageRep+JPEG.m. Patch -_initBitmapFromJPEG:errorMessage
to
write properties.
Comment: Major rewrite of Nicolas Roard's JPEG export code.
To do: Support for planar bitmaps and support for colorspaces
other than
RGB(A).
10. PNG export not implemented
Fix: Add -_PNGRepresentationWithProperties: to
NSBitmapImageRep+PNG.h and implement NSBitmapImageRep+PNG.m
Comment: No support yet for planar bitmaps. Only supports
NS*WhiteColorSpace and NS*RGBColorSpace. Does support alpha.
Support for
reading and writing NSImageGamma is experimental. In keeping
with Cocoa,
the property NSImageGamma ranges from 0.0 to 1.0; representing
the range
of minimum supported gamma to maximum supported gamma, in this
case 1.0
to 2.5. This is in contrast to GNUstep where by convention the
property
would range from 0.0 to 255.0.
To do: proper error message support
11. GIF export not implemented
Fix: Add -_GIFRepresentationWithPropterties:errorMessage: to
NSBitmapImageRep+GIF.h and implement in NSBitmapImageRep+GIF.m
Comments: Supports only RGB(A) colorspaces, but ignores alpha.
Supports
planar or interleaved bitmaps. Supports properties
NSImageRGBColorTable.
12. -_initBitmapFromGIF:errorMessage: did not support transparency
Fix: Don't ignore control blocks in NSBitmapImageRep+GIF.m; check
for
transparency.
Comment: If a transparent color is found, it adds an alpha channel
to the
bitmap. Also, save the color table in properties.
13. -_initBitmapFromGIF:errorMessage: would show the last image in a
multi-image GIF file
Fix: Break the parsing loop after the first image in
NSBitmapImageRep+GIF.m
Comment: Also check for frame duration, and set that property.
There is not
yet any support for animated GIF. This will require some
additional
infrastructure, and I won't do it unless asked.
Modified:
libs/gui/trunk/Headers/AppKit/NSBitmapImageRep.h
libs/gui/trunk/Source/NSBitmapImageRep+GIF.h
libs/gui/trunk/Source/NSBitmapImageRep+GIF.m
libs/gui/trunk/Source/NSBitmapImageRep+JPEG.h
libs/gui/trunk/Source/NSBitmapImageRep+JPEG.m
libs/gui/trunk/Source/NSBitmapImageRep+PNG.h
libs/gui/trunk/Source/NSBitmapImageRep+PNG.m
libs/gui/trunk/Source/NSBitmapImageRep.m
libs/gui/trunk/Source/externs.m
libs/gui/trunk/Source/nsimage-tiff.h
libs/gui/trunk/Source/tiff.m
_______________________________________________
Gnustep-cvs mailing list
address@hidden
https://mail.gna.org/listinfo/gnustep-cvs