images.normalization: removed a lot of boilerplate
parent
f60bcc7dc1
commit
bf42c83690
|
@ -1,76 +1,95 @@
|
|||
! BSD License. Copyright 2009 Keith Lazuka
|
||||
USING: images.normalization images.normalization.private
|
||||
USING: images images.normalization images.normalization.private
|
||||
sequences tools.test ;
|
||||
IN: images.normalization.tests
|
||||
|
||||
! R
|
||||
|
||||
[ B{ 0 255 255 255 1 255 255 255 } ]
|
||||
[ B{ 0 1 } R RGBA permute ] unit-test
|
||||
|
||||
[ B{ 255 255 0 255 255 1 } ]
|
||||
[ B{ 0 1 } R BGR permute ] unit-test
|
||||
|
||||
[ B{ 255 255 0 255 255 255 1 255 } ]
|
||||
[ B{ 0 1 } R BGRA permute ] unit-test
|
||||
|
||||
[ B{ 255 0 255 255 255 1 255 255 } ]
|
||||
[ B{ 0 1 } R ARGB permute ] unit-test
|
||||
|
||||
! RGB
|
||||
|
||||
[ B{ 0 3 } ]
|
||||
[ B{ 0 1 2 3 4 5 } RGB R permute ] unit-test
|
||||
|
||||
[ B{ 0 1 2 255 3 4 5 255 } ]
|
||||
[ B{ 0 1 2 3 4 5 } RGB>RGBA ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 } RGB RGBA permute ] unit-test
|
||||
|
||||
[ B{ 2 1 0 5 4 3 } ]
|
||||
[ B{ 0 1 2 3 4 5 } RGB>BGR ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 } RGB BGR permute ] unit-test
|
||||
|
||||
[ B{ 2 1 0 255 5 4 3 255 } ]
|
||||
[ B{ 0 1 2 3 4 5 } RGB>BGRA ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 } RGB BGRA permute ] unit-test
|
||||
|
||||
[ B{ 255 0 1 2 255 3 4 5 } ]
|
||||
[ B{ 0 1 2 3 4 5 } RGB>ARGB ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 } RGB ARGB permute ] unit-test
|
||||
|
||||
! RGBA
|
||||
|
||||
[ B{ 0 4 } ]
|
||||
[ B{ 0 1 2 3 4 5 6 7 } RGBA R permute ] unit-test
|
||||
|
||||
[ B{ 0 1 2 4 5 6 } ]
|
||||
[ B{ 0 1 2 3 4 5 6 7 } RGBA>RGB ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 6 7 } RGBA RGB permute ] unit-test
|
||||
|
||||
[ B{ 2 1 0 6 5 4 } ]
|
||||
[ B{ 0 1 2 3 4 5 6 7 } RGBA>BGR ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 6 7 } RGBA BGR permute ] unit-test
|
||||
|
||||
[ B{ 2 1 0 3 6 5 4 7 } ]
|
||||
[ B{ 0 1 2 3 4 5 6 7 } RGBA>BGRA ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 6 7 } RGBA BGRA permute ] unit-test
|
||||
|
||||
[ B{ 3 0 1 2 7 4 5 6 } ]
|
||||
[ B{ 0 1 2 3 4 5 6 7 } RGBA>ARGB ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 6 7 } RGBA ARGB permute ] unit-test
|
||||
|
||||
! BGR
|
||||
|
||||
[ B{ 2 1 0 5 4 3 } ]
|
||||
[ B{ 0 1 2 3 4 5 } BGR>RGB ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 } BGR RGB permute ] unit-test
|
||||
|
||||
[ B{ 2 1 0 255 5 4 3 255 } ]
|
||||
[ B{ 0 1 2 3 4 5 } BGR>RGBA ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 } BGR RGBA permute ] unit-test
|
||||
|
||||
[ B{ 0 1 2 255 3 4 5 255 } ]
|
||||
[ B{ 0 1 2 3 4 5 } BGR>BGRA ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 } BGR BGRA permute ] unit-test
|
||||
|
||||
[ B{ 255 2 1 0 255 5 4 3 } ]
|
||||
[ B{ 0 1 2 3 4 5 } BGR>ARGB ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 } BGR ARGB permute ] unit-test
|
||||
|
||||
! BGRA
|
||||
|
||||
[ B{ 2 1 0 6 5 4 } ]
|
||||
[ B{ 0 1 2 3 4 5 6 7 } BGRA>RGB ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 6 7 } BGRA RGB permute ] unit-test
|
||||
|
||||
[ B{ 0 1 2 4 5 6 } ]
|
||||
[ B{ 0 1 2 3 4 5 6 7 } BGRA>BGR ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 6 7 } BGRA BGR permute ] unit-test
|
||||
|
||||
[ B{ 2 1 0 3 6 5 4 7 } ]
|
||||
[ B{ 0 1 2 3 4 5 6 7 } BGRA>RGBA ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 6 7 } BGRA RGBA permute ] unit-test
|
||||
|
||||
[ B{ 3 2 1 0 7 6 5 4 } ]
|
||||
[ B{ 0 1 2 3 4 5 6 7 } BGRA>ARGB ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 6 7 } BGRA ARGB permute ] unit-test
|
||||
|
||||
! ARGB
|
||||
|
||||
[ B{ 1 2 3 5 6 7 } ]
|
||||
[ B{ 0 1 2 3 4 5 6 7 } ARGB>RGB ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 6 7 } ARGB RGB permute ] unit-test
|
||||
|
||||
[ B{ 3 2 1 7 6 5 } ]
|
||||
[ B{ 0 1 2 3 4 5 6 7 } ARGB>BGR ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 6 7 } ARGB BGR permute ] unit-test
|
||||
|
||||
[ B{ 3 2 1 0 7 6 5 4 } ]
|
||||
[ B{ 0 1 2 3 4 5 6 7 } ARGB>BGRA ] unit-test
|
||||
[ B{ 0 1 2 3 4 5 6 7 } ARGB BGRA permute ] unit-test
|
||||
|
||||
[ B{ 1 2 3 0 5 6 7 4 } ]
|
||||
[ B{ 0 1 2 3 4 5 6 7 } ARGB>RGBA ] unit-test
|
||||
|
||||
[ B{ 0 1 2 3 4 5 6 7 } ARGB RGBA permute ] unit-test
|
||||
|
||||
|
|
|
@ -1,120 +1,37 @@
|
|||
! Copyright (C) 2009 Doug Coleman, Keith Lazuka
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien.c-types kernel accessors grouping sequences
|
||||
combinators math byte-arrays fry images half-floats
|
||||
specialized-arrays words ;
|
||||
USING: accessors alien.c-types byte-arrays combinators fry
|
||||
grouping half-floats images kernel math math.vectors sequences
|
||||
specialized-arrays specialized-arrays.instances.float
|
||||
specialized-arrays.instances.half
|
||||
specialized-arrays.instances.uint
|
||||
specialized-arrays.instances.ushort words ;
|
||||
FROM: alien.c-types => float ;
|
||||
SPECIALIZED-ARRAY: uint
|
||||
SPECIALIZED-ARRAY: ushort
|
||||
SPECIALIZED-ARRAY: float
|
||||
SPECIALIZED-ARRAY: half
|
||||
IN: images.normalization
|
||||
|
||||
<PRIVATE
|
||||
|
||||
! Helpers
|
||||
: add-dummy-alpha ( seq -- seq' )
|
||||
3 <groups> [ 255 suffix ] map concat ;
|
||||
CONSTANT: don't-care 3
|
||||
|
||||
: normalize-floats ( float-array -- byte-array )
|
||||
[ 255.0 * >integer ] B{ } map-as ;
|
||||
|
||||
: fix-XBGR ( bitmap -- bitmap' )
|
||||
dup 4 <sliced-groups> [ [ 255 0 ] dip set-nth ] each ;
|
||||
|
||||
: fix-BGRX ( bitmap -- bitmap' )
|
||||
dup 4 <sliced-groups> [ [ 255 3 ] dip set-nth ] each ;
|
||||
|
||||
! Bitmap Conversions
|
||||
|
||||
! TODO RGBX, XRGB, BGRX, XBGR conversions
|
||||
|
||||
: BGR>BGR ( bitmap -- bitmap' ) ;
|
||||
|
||||
: BGR>RGB ( bitmap -- bitmap' )
|
||||
3 <sliced-groups> [ <reversed> ] map concat ; inline
|
||||
|
||||
: BGR>BGRA ( bitmap -- bitmap' ) add-dummy-alpha ; inline
|
||||
|
||||
: BGR>RGBA ( bitmap -- bitmap' ) BGR>RGB add-dummy-alpha ; inline
|
||||
|
||||
: BGR>ARGB ( bitmap -- bitmap' )
|
||||
3 <sliced-groups> [ 255 suffix <reversed> ] map concat ; inline
|
||||
|
||||
: BGRA>BGRA ( bitmap -- bitmap' ) ;
|
||||
|
||||
: BGRA>BGR ( bitmap -- bitmap' )
|
||||
4 <sliced-groups> [ but-last-slice ] map concat ; inline
|
||||
|
||||
: BGRA>RGBA ( bitmap -- bitmap' )
|
||||
4 <sliced-groups>
|
||||
[ unclip-last-slice [ <reversed> ] dip suffix ] map concat ; inline
|
||||
|
||||
: BGRA>RGB ( bitmap -- bitmap' )
|
||||
4 <sliced-groups> [ but-last-slice <reversed> ] map concat ; inline
|
||||
|
||||
: BGRA>ARGB ( bitmap -- bitmap' )
|
||||
4 <sliced-groups> [ <reversed> ] map concat ; inline
|
||||
|
||||
: RGB>RGB ( bitmap -- bitmap' ) ;
|
||||
|
||||
: RGB>BGR ( bitmap -- bitmap' ) BGR>RGB ; inline
|
||||
|
||||
: RGB>RGBA ( bitmap -- bitmap' ) add-dummy-alpha ; inline
|
||||
|
||||
: RGB>BGRA ( bitmap -- bitmap' )
|
||||
3 <sliced-groups> [ <reversed> add-dummy-alpha ] map concat ; inline
|
||||
|
||||
: RGB>ARGB ( bitmap -- bitmap' )
|
||||
3 <sliced-groups> [ 255 prefix ] map concat ; inline
|
||||
|
||||
: RGBA>RGBA ( bitmap -- bitmap' ) ;
|
||||
|
||||
: RGBA>BGR ( bitmap -- bitmap' ) BGRA>RGB ; inline
|
||||
|
||||
: RGBA>BGRA ( bitmap -- bitmap' ) BGRA>RGBA ; inline
|
||||
|
||||
: RGBA>RGB ( bitmap -- bitmap' ) BGRA>BGR ; inline
|
||||
|
||||
: RGBA>ARGB ( bitmap -- bitmap' )
|
||||
4 <sliced-groups> [ unclip-last-slice prefix ] map concat ; inline
|
||||
|
||||
: ARGB>ARGB ( bitmap -- bitmap' ) ;
|
||||
|
||||
: ARGB>RGB ( bitmap -- bitmap' )
|
||||
4 <sliced-groups> [ rest-slice ] map concat ; inline
|
||||
|
||||
: ARGB>RGBA ( bitmap -- bitmap' )
|
||||
4 <sliced-groups> [ unclip-slice suffix ] map concat ; inline
|
||||
|
||||
: ARGB>BGR ( bitmap -- bitmap' )
|
||||
4 <sliced-groups> [ rest-slice <reversed> ] map concat ; inline
|
||||
|
||||
: ARGB>BGRA ( bitmap -- bitmap' )
|
||||
4 <sliced-groups>
|
||||
[ unclip-slice [ <reversed> ] dip suffix ] map concat ; inline
|
||||
|
||||
: (reorder-colors) ( image src-order des-order -- image )
|
||||
[ name>> ] bi@ ">" glue "images.normalization.private" lookup
|
||||
[ '[ _ execute( image -- image' ) ] change-bitmap ]
|
||||
[ "No component-order conversion found." throw ]
|
||||
if* ;
|
||||
|
||||
PRIVATE>
|
||||
|
||||
: reorder-colors ( image component-order -- image )
|
||||
: permutation ( src dst -- seq n )
|
||||
[
|
||||
[ component-type>> ubyte-components assert= ]
|
||||
[ dup component-order>> ] bi
|
||||
] dip (reorder-colors) ;
|
||||
swap '[ _ index [ don't-care ] unless* ] { } map-as
|
||||
4 don't-care pad-tail
|
||||
] keep length ;
|
||||
|
||||
<PRIVATE
|
||||
: pad4 ( seq -- newseq ) 4 255 pad-tail ;
|
||||
|
||||
: permute ( byte-array src-order dst-order -- byte-array )
|
||||
[ name>> [ length ] keep ] [ name>> ] bi*
|
||||
permutation [ group ] 2dip '[ pad4 _ vshuffle _ head ] map concat ;
|
||||
|
||||
: (reorder-colors) ( image src-order dest-order -- image )
|
||||
[ permute ] 2curry change-bitmap ;
|
||||
|
||||
GENERIC: normalize-component-type* ( image component-type -- image )
|
||||
|
||||
: normalize-component-order ( image -- image )
|
||||
dup component-type>> '[ _ normalize-component-type* ] change-bitmap
|
||||
RGBA reorder-colors ;
|
||||
: normalize-floats ( float-array -- byte-array )
|
||||
[ 255.0 * >integer ] B{ } map-as ;
|
||||
|
||||
M: float-components normalize-component-type*
|
||||
drop byte-array>float-array normalize-floats ;
|
||||
|
@ -141,9 +58,15 @@ M: ubyte-components normalize-component-type*
|
|||
|
||||
PRIVATE>
|
||||
|
||||
: reorder-colors ( image component-order -- image )
|
||||
[
|
||||
dup component-type>> '[ _ normalize-component-type* ] change-bitmap
|
||||
dup component-order>>
|
||||
] dip
|
||||
[ (reorder-colors) ] keep >>component-order ;
|
||||
|
||||
: normalize-image ( image -- image )
|
||||
[ >byte-array ] change-bitmap
|
||||
normalize-component-order
|
||||
normalize-scan-line-order
|
||||
RGBA >>component-order ;
|
||||
RGBA reorder-colors
|
||||
normalize-scan-line-order ;
|
||||
|
||||
|
|
Loading…
Reference in New Issue