! use source and destination component-order to shuffle color components ! fills with 255 if destination component was not found in the source. ! ! example usage / tests: ! [ 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 permute ] unit-test ! ! [ B{ 2 1 0 5 4 3 } ] ! [ B{ 0 1 2 3 4 5 } RGB BGR permute ] unit-test > [ length ] keep ] [ name>> ] bi* permutation [ group ] 2dip '[ pad4 _ vshuffle _ head ] map concat ; : (reorder-colors) ( image src-order dest-order -- image ) [ permute ] 2curry change-bitmap ; PRIVATE> : reorder-colors ( image component-order -- image ) [ [ component-type>> ubyte-components assert= ] [ dup component-order>> ] bi ] dip (reorder-colors) ;