gif: preparing for LZW re-integration with TIFF
parent
c0a8334d98
commit
e006b62962
|
@ -13,8 +13,6 @@ SYMBOL: end-of-information
|
||||||
|
|
||||||
TUPLE: lzw input output table code old-code initial-code-size code-size ;
|
TUPLE: lzw input output table code old-code initial-code-size code-size ;
|
||||||
|
|
||||||
SYMBOL: table-full
|
|
||||||
|
|
||||||
: initial-uncompress-table ( -- seq )
|
: initial-uncompress-table ( -- seq )
|
||||||
end-of-information get 1 + iota [ 1vector ] V{ } map-as ;
|
end-of-information get 1 + iota [ 1vector ] V{ } map-as ;
|
||||||
|
|
||||||
|
@ -22,11 +20,11 @@ SYMBOL: table-full
|
||||||
initial-uncompress-table >>table
|
initial-uncompress-table >>table
|
||||||
dup initial-code-size>> >>code-size ;
|
dup initial-code-size>> >>code-size ;
|
||||||
|
|
||||||
: <lzw-uncompress> ( code-size input -- obj )
|
: <lzw-uncompress> ( input code-size -- obj )
|
||||||
lzw new
|
lzw new
|
||||||
swap >>input
|
|
||||||
swap >>initial-code-size
|
swap >>initial-code-size
|
||||||
dup initial-code-size>> >>code-size
|
dup initial-code-size>> >>code-size
|
||||||
|
swap >>input
|
||||||
BV{ } clone >>output
|
BV{ } clone >>output
|
||||||
reset-lzw-uncompress ;
|
reset-lzw-uncompress ;
|
||||||
|
|
||||||
|
@ -103,14 +101,19 @@ DEFER: lzw-uncompress-char
|
||||||
drop
|
drop
|
||||||
] if* ;
|
] if* ;
|
||||||
|
|
||||||
: register-special-codes ( first-code-size -- )
|
: register-special-codes ( first-code-size -- first-code-size )
|
||||||
[
|
[
|
||||||
1 - 2^ dup clear-code set
|
1 - 2^ dup clear-code set
|
||||||
1 + end-of-information set
|
1 + end-of-information set
|
||||||
] keep ;
|
] keep ;
|
||||||
|
|
||||||
: lzw-uncompress ( code-size seq -- byte-array )
|
: lzw-uncompress ( bitstream code-size -- byte-array )
|
||||||
[ register-special-codes ] dip
|
register-special-codes
|
||||||
bs:<lsb0-bit-reader>
|
|
||||||
<lzw-uncompress>
|
<lzw-uncompress>
|
||||||
[ lzw-uncompress-char ] [ output>> ] bi ;
|
[ lzw-uncompress-char ] [ output>> ] bi ;
|
||||||
|
|
||||||
|
: lzw-uncompress-msb0 ( seq code-size -- byte-array )
|
||||||
|
[ bs:<msb0-bit-reader> ] dip lzw-uncompress ;
|
||||||
|
|
||||||
|
: lzw-uncompress-lsb0 ( seq code-size -- byte-array )
|
||||||
|
[ bs:<lsb0-bit-reader> ] dip lzw-uncompress ;
|
||||||
|
|
|
@ -47,9 +47,9 @@ IN: images.gif.tests
|
||||||
[ 2 ] [ gif-example3 declared-num-colors ] unit-test
|
[ 2 ] [ gif-example3 declared-num-colors ] unit-test
|
||||||
|
|
||||||
: >index-stream ( gif -- seq )
|
: >index-stream ( gif -- seq )
|
||||||
[ image-descriptor>> first-code-size>> ]
|
[ compressed-bytes>> ]
|
||||||
[ compressed-bytes>> ] bi
|
[ image-descriptor>> first-code-size>> ] bi
|
||||||
lzw-uncompress ;
|
lzw-uncompress-lsb0 ;
|
||||||
|
|
||||||
[
|
[
|
||||||
BV{
|
BV{
|
||||||
|
|
|
@ -225,9 +225,9 @@ ERROR: unhandled-data byte ;
|
||||||
] with-input-stream ;
|
] with-input-stream ;
|
||||||
|
|
||||||
: decompress ( loading-gif -- indexes )
|
: decompress ( loading-gif -- indexes )
|
||||||
[ image-descriptor>> first-code-size>> ]
|
[ compressed-bytes>> ]
|
||||||
[ compressed-bytes>> ] bi
|
[ image-descriptor>> first-code-size>> ] bi
|
||||||
lzw-uncompress ;
|
lzw-uncompress-lsb0 ;
|
||||||
|
|
||||||
: colorize ( index palette transparent-index/f -- seq )
|
: colorize ( index palette transparent-index/f -- seq )
|
||||||
pick = [ 2drop B{ 0 0 0 0 } ] [ nth 255 suffix ] if ;
|
pick = [ 2drop B{ 0 0 0 0 } ] [ nth 255 suffix ] if ;
|
||||||
|
|
Loading…
Reference in New Issue