--- 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.
+ ].
+ ].
].
].
].