From e9c780ba28b63306c468f201d71adb601e4403e6 Mon Sep 17 00:00:00 2001 From: Keith Lazuka Date: Thu, 24 Sep 2009 14:54:35 -0400 Subject: [PATCH] images.gif: Decompression now works. Still need to implement transparency and merge with TIFF LZW code --- extra/compression/lzw-gif/lzw-gif.factor | 116 ++++++++++++++++++ extra/images/gif/gif-tests.factor | 29 ++++- extra/images/gif/gif.factor | 37 ++++-- extra/images/testing/monochrome.gif | Bin 45 -> 51 bytes extra/images/testing/noise.bmp | Bin 0 -> 49208 bytes extra/images/testing/noise.gif | Bin 0 -> 21181 bytes .../images/testing/symbol-word-16-colors.gif | Bin 142 -> 0 bytes extra/images/testing/symbol-word.gif | Bin 0 -> 129 bytes 8 files changed, 169 insertions(+), 13 deletions(-) create mode 100644 extra/compression/lzw-gif/lzw-gif.factor create mode 100644 extra/images/testing/noise.bmp create mode 100644 extra/images/testing/noise.gif delete mode 100644 extra/images/testing/symbol-word-16-colors.gif create mode 100644 extra/images/testing/symbol-word.gif diff --git a/extra/compression/lzw-gif/lzw-gif.factor b/extra/compression/lzw-gif/lzw-gif.factor new file mode 100644 index 0000000000..1d98fdd4ee --- /dev/null +++ b/extra/compression/lzw-gif/lzw-gif.factor @@ -0,0 +1,116 @@ +! Copyright (C) 2009 Doug Coleman, Keith Lazuka +! See http://factorcode.org/license.txt for BSD license. +USING: accessors combinators io kernel math namespaces +prettyprint sequences vectors ; +QUALIFIED-WITH: bitstreams bs +IN: compression.lzw-gif + +SYMBOL: clear-code +4 clear-code set-global + +SYMBOL: end-of-information +5 end-of-information set-global + +TUPLE: lzw input output table code old-code initial-code-size code-size ; + +SYMBOL: table-full + +: initial-uncompress-table ( -- seq ) + end-of-information get 1 + iota [ 1vector ] V{ } map-as ; + +: reset-lzw-uncompress ( lzw -- lzw ) + initial-uncompress-table >>table + dup initial-code-size>> >>code-size ; + +: ( code-size input -- obj ) + lzw new + swap >>input + swap >>initial-code-size + dup initial-code-size>> >>code-size + BV{ } clone >>output + reset-lzw-uncompress ; + +ERROR: not-in-table value ; + +: lookup-old-code ( lzw -- vector ) + [ old-code>> ] [ table>> ] bi nth ; + +: lookup-code ( lzw -- vector ) + [ code>> ] [ table>> ] bi nth ; + +: code-in-table? ( lzw -- ? ) + [ code>> ] [ table>> length ] bi < ; + +: code>old-code ( lzw -- lzw ) + dup code>> >>old-code ; + +: write-code ( lzw -- ) + [ lookup-code ] [ output>> ] bi push-all ; + +: maybe-increment-code-size ( lzw -- lzw ) + dup [ table>> length ] [ code-size>> 2^ ] bi = + [ [ 1 + ] change-code-size ] when ; + +: add-to-table ( seq lzw -- ) + [ table>> push ] + [ maybe-increment-code-size 2drop ] 2bi ; + +: lzw-read ( lzw -- lzw n ) + [ ] [ code-size>> ] [ input>> ] tri bs:read ; + +DEFER: lzw-uncompress-char +: handle-clear-code ( lzw -- ) + reset-lzw-uncompress + lzw-read dup end-of-information get = [ + 2drop + ] [ + >>code + [ write-code ] + [ code>old-code ] bi + lzw-uncompress-char + ] if ; + +: handle-uncompress-code ( lzw -- lzw ) + dup code-in-table? [ + [ write-code ] + [ + [ + [ lookup-old-code ] + [ lookup-code first ] bi suffix + ] [ add-to-table ] bi + ] [ code>old-code ] tri + ] [ + [ + [ lookup-old-code dup first suffix ] keep + [ output>> push-all ] [ add-to-table ] 2bi + ] [ code>old-code ] bi + ] if ; + +: lzw-uncompress-char ( lzw -- ) + lzw-read [ + >>code + dup code>> end-of-information get = [ + drop + ] [ + dup code>> clear-code get = [ + handle-clear-code + ] [ + handle-uncompress-code + lzw-uncompress-char + ] if + ] if + ] [ + drop + ] if* ; + +: register-special-codes ( first-code-size -- ) + [ + 1 - 2^ dup clear-code set + 1 + end-of-information set + ] keep ; + +: lzw-uncompress ( code-size seq -- byte-array ) + [ register-special-codes ] dip + bs: + + [ lzw-uncompress-char ] [ output>> ] bi ; diff --git a/extra/images/gif/gif-tests.factor b/extra/images/gif/gif-tests.factor index 1c4a80107e..609f98c693 100644 --- a/extra/images/gif/gif-tests.factor +++ b/extra/images/gif/gif-tests.factor @@ -1,14 +1,16 @@ ! Copyright (C) 2009 Keith Lazuka. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors images.gif io io.encodings.binary io.files -math namespaces sequences tools.test math.bitwise ; +USING: accessors bitstreams compression.lzw-gif images.gif io +io.encodings.binary io.files kernel math math.bitwise +math.parser namespaces prettyprint sequences tools.test ; +QUALIFIED-WITH: bitstreams bs IN: images.gif.tests : path>gif ( path -- loading-gif ) binary [ input-stream get load-gif ] with-file-reader ; : gif-example1 ( -- loading-gif ) - "resource:extra/images/testing/symbol-word-16-colors.gif" path>gif ; + "resource:extra/images/testing/symbol-word.gif" path>gif ; : gif-example2 ( -- loading-gif ) "resource:extra/images/testing/check-256-colors.gif" path>gif ; @@ -16,6 +18,9 @@ IN: images.gif.tests : gif-example3 ( -- loading-gif ) "resource:extra/images/testing/monochrome.gif" path>gif ; +: gif-example4 ( -- loading-gif ) + "resource:extra/images/testing/noise.gif" path>gif ; + : declared-num-colors ( gif -- n ) flags>> 3 bits 1 + 2^ ; : actual-num-colors ( gif -- n ) global-color-table>> length 3 /i ; @@ -27,3 +32,21 @@ IN: images.gif.tests [ 2 ] [ gif-example3 actual-num-colors ] unit-test [ 2 ] [ gif-example3 declared-num-colors ] unit-test + +: >index-stream ( gif -- seq ) + [ image-descriptor>> first-code-size>> ] + [ compressed-bytes>> ] bi + lzw-uncompress ; + +[ + BV{ + 0 0 0 0 0 0 + 1 0 0 0 0 1 + 1 1 0 0 1 1 + 1 1 1 1 1 1 + 1 0 1 1 0 1 + 1 0 0 0 0 1 + } +] [ gif-example3 >index-stream ] unit-test + + diff --git a/extra/images/gif/gif.factor b/extra/images/gif/gif.factor index cbe7fa5f3a..4744f55a6b 100644 --- a/extra/images/gif/gif.factor +++ b/extra/images/gif/gif.factor @@ -1,11 +1,11 @@ ! Copyrigt (C) 2009 Doug Coleman. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors arrays combinators constructors destructors -images images.loader io io.binary io.buffers -io.encodings.binary io.encodings.string io.encodings.utf8 -io.files io.files.info io.ports io.streams.limited kernel make -math math.bitwise math.functions multiline namespaces -prettyprint sequences ; +USING: accessors arrays assocs combinators compression.lzw-gif +constructors destructors grouping images images.loader io +io.binary io.buffers io.encodings.binary io.encodings.string +io.encodings.utf8 io.files io.files.info io.ports +io.streams.limited kernel make math math.bitwise math.functions +multiline namespaces prettyprint sequences ; IN: images.gif SINGLETON: gif-image @@ -42,7 +42,7 @@ packed delay-time color-index block-terminator ; TUPLE: image-descriptor -left top width height flags lzw-min-code-size ; +left top width height flags first-code-size ; TUPLE: plain-text-extension introducer label block-size text-grid-left text-grid-top text-grid-width @@ -97,7 +97,7 @@ M: input-port stream-peek1 2 read le> >>width 2 read le> >>height 1 read le> >>flags - 1 read le> >>lzw-min-code-size ; + 1 read le> 1 + >>first-code-size ; : read-graphic-control-extension ( -- graphic-control-extension ) \ graphics-control-extension new @@ -152,7 +152,7 @@ ERROR: unimplemented message ; : read-global-color-table ( loading-gif -- loading-gif ) dup color-table? [ - dup color-table-size read >>global-color-table + dup color-table-size read 3 group >>global-color-table ] when ; : maybe-read-local-color-table ( loading-gif -- loading-gif ) @@ -220,8 +220,25 @@ ERROR: unhandled-data byte ; } case ] with-input-stream ; +: decompress ( loading-gif -- indexes ) + [ image-descriptor>> first-code-size>> ] + [ compressed-bytes>> ] bi + lzw-uncompress ; + +: apply-palette ( indexes palette -- bitmap ) + [ nth 255 suffix ] curry V{ } map-as concat ; + +: dimensions ( loading-gif -- dim ) + [ image-descriptor>> width>> ] [ image-descriptor>> height>> ] bi 2array ; + : loading-gif>image ( loading-gif -- image ) - ; + [ ] dip + [ dimensions >>dim ] + [ drop RGBA >>component-order ubyte-components >>component-type ] + [ + [ decompress ] [ global-color-table>> ] bi + apply-palette >>bitmap + ] tri ; ERROR: loading-gif-error gif-image ; diff --git a/extra/images/testing/monochrome.gif b/extra/images/testing/monochrome.gif index de74e65eb1d6f01b022983cc4e24a5f3e0315a1c..b0875faa615f2aca084f2ebe35449caa7224af85 100644 GIT binary patch literal 51 zcmZ?wbhEHbWMg1sXkcLY|NlP&1B2pE79h#MpaUX6G7L;yE%NLKkMW0RtzclV1^^lk B3U~kj literal 45 ycmZ?wbhEHb1wd6z(}2hBE-@IB4`JXv{|HXUH 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 diff --git a/extra/images/testing/symbol-word.gif b/extra/images/testing/symbol-word.gif new file mode 100644 index 0000000000000000000000000000000000000000..101a48a880cb33a5c1f26cfd6761b9d347216bbf GIT binary patch literal 129 zcmZ?wbhEHbWLWCLu-c7bqX)xQPli=q3_E=p4h1rt4q>KUo+V82A}