#FEATURE
authorClaus Gittinger <cg@exept.de>
Mon, 07 Mar 2016 10:10:35 +0100
changeset 3591 87336f7e44cf
parent 3590 104bc11d3845
child 3592 6a70bc638877
#FEATURE class: WindowsIconReader class definition added: #image changed: #fromWindowsBMPStream:alreadyRead: win4+ png and jpg images.
WindowsIconReader.st
--- a/WindowsIconReader.st	Mon Mar 07 01:56:08 2016 +0100
+++ b/WindowsIconReader.st	Mon Mar 07 10:10:35 2016 +0100
@@ -14,7 +14,8 @@
 "{ NameSpace: Smalltalk }"
 
 ImageReader subclass:#WindowsIconReader
-	instanceVariableNames:'compression inDepth topDown redMask greenMask blueMask alphaMask'
+	instanceVariableNames:'compression inDepth topDown redMask greenMask blueMask alphaMask
+		pngOrJPGImage'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Graphics-Images-Readers'
@@ -302,6 +303,13 @@
     "Created: 17.9.1995 / 17:14:20 / claus"
 ! !
 
+!WindowsIconReader methodsFor:'accessing'!
+
+image
+    pngOrJPGImage notNil ifTrue:[^ pngOrJPGImage].
+    ^ super image
+! !
+
 !WindowsIconReader methodsFor:'private'!
 
 bitsPerPixel
@@ -1223,6 +1231,18 @@
         numImportantColor := bitmapHeader doubleWordAt:(36 + 1) MSB:false.
         
         (compression > 3) ifTrue:[
+            compression == 5 ifTrue:[
+                "/ PNG in data
+                aStream position:dataStart.
+                pngOrJPGImage := PNGReader fromStream:aStream.
+                ^ pngOrJPGImage
+            ].    
+            compression == 4 ifTrue:[
+                "/ JPG in data
+                aStream position:dataStart.
+                pngOrJPGImage := JPEGReader fromStream:aStream.
+                ^ pngOrJPGImage
+            ].    
             ^ self fileFormatError:'unhandled compression'.
         ].