PNGReader.st
changeset 3904 f9baf7a194d9
parent 3903 754f50ffb404
child 3909 a275bdd921fc
--- a/PNGReader.st	Fri Feb 17 14:18:40 2017 +0100
+++ b/PNGReader.st	Fri Feb 17 17:28:15 2017 +0100
@@ -935,9 +935,32 @@
 
 processTRNSChunkLen:len
     paletteAlphaEntries := inStream nextBytes:len.
+    
+    colorType == ColorTypeRGB ifTrue:[
+        len ~~ 3 ifTrue:[
+            Logger warning:'PNG: bad trns chunk size'.
+            paletteAlphaEntries := nil.
+        ].
+        ^ true
+    ].    
+    colorType == ColorTypePalette ifTrue:[
+        len ~~ 1 ifTrue:[
+            Logger warning:'PNG: bad trns chunk size'.
+            paletteAlphaEntries := nil.
+        ].
+        ^ true
+    ].        
+    colorType == ColorTypeGray ifTrue:[
+        len ~~ 2 ifTrue:[
+            Logger warning:'PNG: bad trns chunk size'.
+            paletteAlphaEntries := nil.
+        ].
+        ^ true
+    ].        
+    paletteAlphaEntries := nil.
     ^ true
 
-    "Modified: / 17-02-2017 / 09:39:25 / cg"
+    "Modified (format): / 17-02-2017 / 16:57:27 / cg"
 !
 
 processZTXTChunkLen:len
@@ -1371,13 +1394,15 @@
     outStream nextPutAll:(self pngHeader).
     
     image mask notNil ifTrue:[
-        (photometric ~~ #rgba) ifTrue: [
+        ((photometric ~~ #rgb) and:[(photometric ~~ #rgba)]) ifTrue: [
             image maskedPixelsAre0 ifTrue:[
                 paletteIndexForMaskedPixels := 0
             ] ifFalse:[
                 self determinePaletteIndexForMaskedPixels
             ]
-        ].
+        ] ifFalse:[
+            photometric := #rgba.
+        ].    
     ].
 
     self writeIHDRChunk.
@@ -1386,7 +1411,7 @@
     self writeImageDataChunk.
     self writeEndChunk
 
-    "Modified: / 16-02-2017 / 21:18:05 / cg"
+    "Modified: / 17-02-2017 / 17:27:52 / cg"
 ! !
 
 !PNGReader methodsFor:'writing-private'!
@@ -1534,7 +1559,6 @@
 
             "/ expand rgb to rgba
             maskRow := mask rowAt:y.
-            self halt.
             
             dstIdx := 1.
             1 to:width do:[:x |
@@ -1571,7 +1595,7 @@
             outStream nextPutAll:compressedBytes
         ]
 
-    "Modified: / 16-02-2017 / 21:13:26 / cg"
+    "Modified: / 17-02-2017 / 17:02:16 / cg"
 !
 
 writePaletteChunk