! (c)2010 Joe Groff bsd license USING: accessors alien.data cocoa cocoa.classes cocoa.messages combinators core-foundation.data core-graphics.types fry images images.loader io kernel literals ; IN: images.cocoa SINGLETON: ns-image ! "png" ns-image register-image-class ! "tif" ns-image register-image-class ! "tiff" ns-image register-image-class ! "gif" ns-image register-image-class ! "jpg" ns-image register-image-class ! "jpeg" ns-image register-image-class ! "bmp" ns-image register-image-class ! "ico" ns-image register-image-class CONSTANT: NSImageRepLoadStatusUnknownType -1 CONSTANT: NSImageRepLoadStatusReadingHeader -2 CONSTANT: NSImageRepLoadStatusWillNeedAllData -3 CONSTANT: NSImageRepLoadStatusInvalidData -4 CONSTANT: NSImageRepLoadStatusUnexpectedEOF -5 CONSTANT: NSImageRepLoadStatusCompleted -6 CONSTANT: NSColorRenderingIntentDefault 0 CONSTANT: NSColorRenderingIntentAbsoluteColorimetric 1 CONSTANT: NSColorRenderingIntentRelativeColorimetric 2 CONSTANT: NSColorRenderingIntentPerceptual 3 CONSTANT: NSColorRenderingIntentSaturation 4 ERROR: ns-image-unknown-type ; ERROR: ns-image-invalid-data ; ERROR: ns-image-unexpected-eof ; ERROR: ns-image-planar-images-not-supported ; : load-image-rep ( -- image-rep ) NSBitmapImageRep contents -> autorelease -> imageRepWithData: NSColorSpace -> genericRGBColorSpace NSColorRenderingIntentDefault -> bitmapImageRepByConvertingToColorSpace:renderingIntent: ; : image-rep>image ( image-rep -- image ) image new swap { [ -> size CGSize>dim >>dim ] [ -> bitmapData ] [ -> bytesPerPlane memory>byte-array >>bitmap ] } cleave RGBA >>component-order ubyte-components >>component-type f >>upside-down? ; M: ns-image stream>image drop [ load-image-rep ] with-input-stream image-rep>image ;