1 ! Copyright (C) 2009 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel accessors grouping sequences combinators
4 math specialized-arrays.direct.uint byte-arrays
5 specialized-arrays.direct.ushort ;
8 SINGLETONS: BGR RGB BGRA RGBA ABGR ARGB RGBX XRGB BGRX XBGR
11 TUPLE: image dim component-order bitmap ;
13 : <image> ( -- image ) image new ; inline
15 GENERIC: load-image* ( path tuple -- image )
17 : add-dummy-alpha ( seq -- seq' )
19 [ 255 suffix ] map concat ;
21 : normalize-component-order ( image -- image )
27 dup length 4 / <direct-uint-array>
28 [ bits>float 255.0 * >integer ] map
29 >byte-array add-dummy-alpha
34 dup length 2 / <direct-ushort-array>
36 >byte-array add-dummy-alpha
41 4 <sliced-groups> dup [ [ 0 3 ] dip <slice> reverse-here ] each
44 { RGB [ [ add-dummy-alpha ] change-bitmap ] }
48 [ [ [ 0 3 ] dip <slice> reverse-here ] each ]
49 [ add-dummy-alpha ] bi
53 RGBA >>component-order ;
55 GENERIC: normalize-scan-line-order ( image -- image )
57 M: image normalize-scan-line-order ;
59 : normalize-image ( image -- image )
60 [ >byte-array ] change-bitmap
61 normalize-component-order
62 normalize-scan-line-order ;