fix reverse png filtering with klazuka's idea

db4
Doug Coleman 2009-09-28 14:20:44 -05:00
parent 01f526ff28
commit 438e848356
1 changed files with 9 additions and 9 deletions

View File

@ -99,11 +99,11 @@ ERROR: unimplemented-color-type image ;
a b + c - { a b c } [ [ - abs ] keep 2array ] with map a b + c - { a b c } [ [ - abs ] keep 2array ] with map
sort-keys first second ; sort-keys first second ;
:: png-unfilter-line ( prev curr filter -- curr' ) :: png-unfilter-line ( width prev curr filter -- curr' )
prev :> c prev :> c
prev 3 tail-slice :> b prev width tail-slice :> b
curr :> a curr :> a
curr 3 tail-slice :> x curr width tail-slice :> x
x length [0,b) x length [0,b)
filter { filter {
{ filter-none [ drop ] } { filter-none [ drop ] }
@ -112,18 +112,18 @@ ERROR: unimplemented-color-type image ;
{ filter-average [ [| n | n x nth n a nth n b nth + 2/ + 256 wrap n x set-nth ] each ] } { filter-average [ [| n | n x nth n a nth n b nth + 2/ + 256 wrap n x set-nth ] each ] }
{ filter-paeth [ [| n | n x nth n a nth n b nth n c nth paeth + 256 wrap n x set-nth ] each ] } { filter-paeth [ [| n | n x nth n a nth n b nth n c nth paeth + 256 wrap n x set-nth ] each ] }
} case } case
curr 3 tail ; curr width tail ;
: reverse-png-filter ( lines -- byte-array ) :: reverse-png-filter ( n lines -- byte-array )
dup first length 0 <array> prefix lines dup first length 0 <array> prefix
[ { 0 0 } prepend ] map [ n 1 - 0 <array> prepend ] map
2 clump [ 2 clump [
first2 dup [ third ] [ [ 0 2 ] dip set-nth ] bi n swap first2 [ ] [ n 1 - swap nth ] [ [ 0 n 1 - ] dip set-nth ] tri
png-unfilter-line png-unfilter-line
] map B{ } concat-as ; ] map B{ } concat-as ;
: png-image-bytes ( loading-png -- byte-array ) : png-image-bytes ( loading-png -- byte-array )
[ inflate-data ] [ png-group-width ] bi group reverse-png-filter ; [ png-bytes-per-pixel ] [ inflate-data ] [ png-group-width ] tri group reverse-png-filter ;
: decode-greyscale ( loading-png -- loading-png ) : decode-greyscale ( loading-png -- loading-png )
unimplemented-color-type ; unimplemented-color-type ;