From f45a6df8e510131642a7639a1bbde9cea8494805 Mon Sep 17 00:00:00 2001 From: Keith Lazuka Date: Mon, 28 Sep 2009 11:21:35 -0400 Subject: [PATCH] images.png: teased apart PNG parse and decode phases to match images.tiff and images.gif --- basis/images/png/png.factor | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/basis/images/png/png.factor b/basis/images/png/png.factor index 7e8f69d555..f090fe0adf 100755 --- a/basis/images/png/png.factor +++ b/basis/images/png/png.factor @@ -125,23 +125,23 @@ ERROR: unimplemented-color-type image ; : png-image-bytes ( loading-png -- byte-array ) [ inflate-data ] [ png-group-width ] bi group reverse-png-filter ; -: decode-greyscale ( loading-png -- loading-png ) +: decode-greyscale ( loading-png -- image ) unimplemented-color-type ; -: decode-truecolor ( loading-png -- loading-png ) +: decode-truecolor ( loading-png -- image ) [ ] dip { [ png-image-bytes >>bitmap ] [ [ width>> ] [ height>> ] bi 2array >>dim ] [ drop RGB >>component-order ubyte-components >>component-type ] } cleave ; -: decode-indexed-color ( loading-png -- loading-png ) +: decode-indexed-color ( loading-png -- image ) unimplemented-color-type ; -: decode-greyscale-alpha ( loading-png -- loading-png ) +: decode-greyscale-alpha ( loading-png -- image ) unimplemented-color-type ; -: decode-truecolor-alpha ( loading-png -- loading-png ) +: decode-truecolor-alpha ( loading-png -- image ) [ ] dip { [ png-image-bytes >>bitmap ] [ [ width>> ] [ height>> ] bi 2array >>dim ] @@ -169,7 +169,7 @@ ERROR: invalid-color-type/bit-depth loading-png ; : validate-truecolor-alpha ( loading-png -- loading-png ) { 8 16 } validate-bit-depth ; -: decode-png ( loading-png -- loading-png ) +: png>image ( loading-png -- image ) dup color-type>> { { greyscale [ validate-greyscale decode-greyscale ] } { truecolor [ validate-truecolor decode-truecolor ] } @@ -179,11 +179,13 @@ ERROR: invalid-color-type/bit-depth loading-png ; [ unknown-color-type ] } case ; -M: png-image stream>image - drop [ +: load-png ( stream -- loading-png ) + [ read-png-header read-png-chunks parse-ihdr-chunk - decode-png ] with-input-stream ; + +M: png-image stream>image + drop load-png png>image ;