--- 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