#FEATURE
authorClaus Gittinger <cg@exept.de>
Mon, 07 Mar 2016 10:18:27 +0100
changeset 3592 6a70bc638877
parent 3591 87336f7e44cf
child 3593 cba067f384d3
#FEATURE class: WindowsIconReader changed: #fromWindowsBMPStream:alreadyRead:
WindowsIconReader.st
--- a/WindowsIconReader.st	Mon Mar 07 10:10:35 2016 +0100
+++ b/WindowsIconReader.st	Mon Mar 07 10:18:27 2016 +0100
@@ -1211,7 +1211,7 @@
 
     dataStart := fileHeader doubleWordAt:(10 + 1) MSB:false.
 
-    ((iSize == 40) or:[iSize == 108 or:[iSize == 124]]) ifTrue:[    "header-size"
+    ((iSize == 40) or:[iSize == 52 or:[iSize == 56 or:[iSize == 108 or:[iSize == 124]]]]) ifTrue:[    "header-size"
         "/
         "/ a Windows3.x BMP file (40)
         "/ a Windows4.x BMP file (108)
@@ -1255,11 +1255,16 @@
             alphaMask := 0.
         ] ifFalse:[        
             iSize > 40 ifTrue:[
+                "/ masks are counted in header (sigh)
                 ((compression == 3) or:[iSize == 108]) ifTrue:[
-                    redMask := bitmapHeader doubleWordAt:(40 + 1) MSB:false.
-                    greenMask := bitmapHeader doubleWordAt:(44 + 1) MSB:false.
-                    blueMask := bitmapHeader doubleWordAt:(48 + 1) MSB:false.
-                    alphaMask := bitmapHeader doubleWordAt:(52 + 1) MSB:false.
+                    iSize >= 52 ifTrue:[
+                        redMask := bitmapHeader doubleWordAt:(40 + 1) MSB:false.
+                        greenMask := bitmapHeader doubleWordAt:(44 + 1) MSB:false.
+                        blueMask := bitmapHeader doubleWordAt:(48 + 1) MSB:false.
+                        iSize >= 56 ifTrue:[
+                            alphaMask := bitmapHeader doubleWordAt:(52 + 1) MSB:false.
+                        ].
+                    ].
                 ].
             ].
         ].