--- a/WindowsIconReader.st Sat Feb 18 16:32:43 1995 +0100
+++ b/WindowsIconReader.st Sat Feb 18 16:52:52 1995 +0100
@@ -21,7 +21,7 @@
COPYRIGHT (c) 1993 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libview2/WindowsIconReader.st,v 1.10 1995-02-06 00:39:48 claus Exp $
+$Header: /cvs/stx/stx/libview2/WindowsIconReader.st,v 1.11 1995-02-18 15:52:37 claus Exp $
'!
!WindowsIconReader class methodsFor:'documentation'!
@@ -42,7 +42,7 @@
version
"
-$Header: /cvs/stx/stx/libview2/WindowsIconReader.st,v 1.10 1995-02-06 00:39:48 claus Exp $
+$Header: /cvs/stx/stx/libview2/WindowsIconReader.st,v 1.11 1995-02-18 15:52:37 claus Exp $
"
!
@@ -60,43 +60,57 @@
Image fileFormats at:'.ico' put:self.
! !
-!WindowsIconReader methodsFor:'reading from file'!
+!WindowsIconReader class methodsFor:'reading from file'!
fromOS2File: aFilename
- inStream := self class streamReadingFile:aFilename.
- inStream isNil ifTrue:[^ nil].
- inStream binary.
- ^ self fromOS2Stream.
+ |reader stream|
+
+ stream := self streamReadingFile:aFilename.
+ stream isNil ifTrue:[^ nil].
+ reader := (self new) fromOS2Stream:aStream.
+ stream close.
+ reader notNil ifTrue:[^ reader image].
+ ^ nil
!
fromWindowsBMPFile: aFilename
- inStream := self class streamReadingFile:aFilename.
- inStream isNil ifTrue:[^ nil].
- inStream binary.
- ^ self fromWindowsBMPStream.
+ |reader stream|
+
+ stream := self class streamReadingFile:aFilename.
+ stream isNil ifTrue:[^ nil].
+ reader := (self new) fromWindowsBMPStream:aStream.
+ stream close.
+ reader notNil ifTrue:[^ reader image].
+ ^ nil
!
fromWindowsICOFile: aFilename
- inStream := self class streamReadingFile:aFilename.
- inStream isNil ifTrue:[^ nil].
- ^ self fromWindowsICOStream.
+ |reader stream|
+
+ stream := self class streamReadingFile:aFilename.
+ stream isNil ifTrue:[^ nil].
+ reader := (self new) fromWindowsICOStream:aStream.
+ stream close.
+ reader notNil ifTrue:[^ reader image].
+ ^ nil
"
Image fromFile:'/phys/clam2//LocalLibrary/Images/WIN_icons/ibm.ico'.
"
!
-fromWindowsICOStream
+fromWindowsICOStream:aStream
| header inDepth
rawMap rMap gMap bMap srcIndex dstIndex
data4 mask tmp bytesPerRow nColor|
- inStream binary.
+ inStream := aStream.
+ aStream binary.
"read the header"
header := ByteArray uninitializedNew:(6 + 16 + 40).
- inStream nextBytes:(6 + 16 + 40) into:header.
+ aStream nextBytes:(6 + 16 + 40) into:header.
width := header at:(6+1).
height := header at:(7+1).
nColor := header at:(8+1).
@@ -110,7 +124,7 @@
"read the colormap"
rawMap := ByteArray uninitializedNew:(16*4).
- inStream nextBytes:(16*4) into:rawMap.
+ aStream nextBytes:(16*4) into:rawMap.
rMap := Array new:16.
gMap := Array new:16.
bMap := Array new:16.
@@ -129,13 +143,13 @@
bytesPerRow := width * inDepth + 7 // 8.
data4 := ByteArray uninitializedNew:(height * bytesPerRow).
- inStream nextBytes:(height * bytesPerRow) into:data4.
+ aStream nextBytes:(height * bytesPerRow) into:data4.
"read mask"
"
mask := ByteArray new:(width * height / 8).
- inStream nextBytes:(width * height / 8) into:mask.
+ aStream nextBytes:(width * height / 8) into:mask.
"
"stupid: last row first"
@@ -160,27 +174,28 @@
photometric := #palette.
samplesPerPixel := 1.
bitsPerSample := #(8).
-"/ colorMap := Array with:rMap with:gMap with:bMap.
colorMap := Colormap redVector:rMap greenVector:gMap blueVector:bMap.
- inStream close.
"
WindowsIconReader new fromWindowsICOFile:'/phys/clam2//LocalLibrary/Images/WIN_icons/ibm.ico'.
"
!
-fromWindowsBMPStream
+fromWindowsBMPStream:aStream
| fileSize header inDepth inPlanes compression
imgSize resH resV numColor numImportantColor
dataStart
rawMap rMap gMap bMap srcIndex dstIndex
data4 mask tmp bytesPerRow fourBytesPerColorInfo|
- fileSize := inStream size.
+ inStream := aStream.
+ aStream binary.
+
+ fileSize := aStream size.
"read the header"
header := ByteArray uninitializedNew:16r54.
- inStream nextBytes:18 into:header.
+ aStream nextBytes:18 into:header.
((header at:(16r0E + 1)) == 40) ifTrue:[ "header-size"
"
@@ -189,7 +204,7 @@
"
'BMP: Win3.x or OS/2 vsn 2 format' errorPrintNL.
- inStream nextBytes:(40-4) into:header startingAt:19.
+ aStream nextBytes:(40-4) into:header startingAt:19.
width := header wordAt:(16r12 + 1). "(header at:19) + ((header at:20) * 256). "
height := header wordAt:(16r16 + 1). "(header at:23) + ((header at:24) * 256). "
@@ -210,7 +225,7 @@
'BMP: missing nColor in header - assume ' errorPrint. numColor errorPrintNL
].
rawMap := ByteArray uninitializedNew:(numColor * 4).
- inStream nextBytes:(numColor * 4) into:rawMap.
+ aStream nextBytes:(numColor * 4) into:rawMap.
fourBytesPerColorInfo := true.
dataStart := header wordAt:(16r0A + 1)
] ifFalse:[
@@ -219,7 +234,7 @@
its an OS/2 (vsn1.2) BMP file
"
'BMP: OS/2 vsn 1.2 format' errorPrintNL.
- inStream nextBytes:(12-4) into:header startingAt:19.
+ aStream nextBytes:(12-4) into:header startingAt:19.
width := header wordAt:(16r12 + 1). "(header at:19) + ((header at:20) * 256). "
height := header wordAt:(16r14 + 1). "(header at:21) + ((header at:22) * 256). "
@@ -227,13 +242,12 @@
inDepth := header wordAt:(16r18 + 1).
numColor := 1 bitShift:inDepth.
rawMap := ByteArray uninitializedNew:(numColor * 3).
- inStream nextBytes:(numColor * 3) into:rawMap.
+ aStream nextBytes:(numColor * 3) into:rawMap.
fourBytesPerColorInfo := false.
compression := 0.
dataStart := header wordAt:(16r0A + 1)
] ifFalse:[
'BMP: unknown format' errorPrintNL.
- inStream close.
^ nil
].
].
@@ -263,12 +277,10 @@
compression ~~ 0 ifTrue:[
'BMP compression type ' errorPrint. compression errorPrint.
'not supported' errorPrintNL.
- inStream close.
^ nil
].
inPlanes ~~ 1 ifTrue:[
'BMP only 1 plane images supported' errorPrintNL.
- inStream close.
^ nil
].
@@ -277,14 +289,14 @@
bytesPerRow := width * inDepth + 7 // 8.
data4 := ByteArray uninitializedNew:(height * bytesPerRow).
- inStream position:(dataStart + 1).
- inStream nextBytes:(height * bytesPerRow) into:data4.
+ aStream position:(dataStart + 1).
+ aStream nextBytes:(height * bytesPerRow) into:data4.
"read mask"
"
mask := ByteArray new:(width * height / 8).
- inStream nextBytes:(width * height / 8) into:mask.
+ aStream nextBytes:(width * height / 8) into:mask.
"
"stupid: last row first"
@@ -309,56 +321,51 @@
photometric := #palette.
samplesPerPixel := 1.
bitsPerSample := #(8).
-"/ colorMap := Array with:rMap with:gMap with:bMap.
colorMap := Colormap redVector:rMap greenVector:gMap blueVector:bMap.
- inStream close.
!
-fromFile: aFilename
+fromStream:aStream
| fileSize header |
- inStream := self class streamReadingFile:aFilename.
- inStream isNil ifTrue:[^ nil].
+ inStream := aStream.
- inStream binary.
- fileSize := inStream size.
+ aStream binary.
+ fileSize := aStream size.
fileSize < 16 ifTrue:[
- inStream close.
- self error:'WINREADER: short file'.
+ 'WINREADER: short file' errorPrintNL.
^ nil
].
header := ByteArray uninitializedNew:4.
- inStream nextBytes:4 into:header.
+ aStream nextBytes:4 into:header.
(header startsWith:#(66 77)) ifTrue:[ "BM"
- inStream position:1.
+ aStream position:1.
'WINREADER: Win3.x or OS/2 vsn 2 BM format' errorPrintNL.
- ^ self fromWindowsBMPStream
+ ^ self fromWindowsBMPStream:aStream
].
(header startsWith:#(66 65)) ifTrue:[ "BA"
- inStream position:1.
+ aStream position:1.
'WINREADER: OS/2 vsn 2 BA format' errorPrintNL.
- ^ self fromOS2Stream
+ ^ self fromOS2Stream:aStream
].
(header startsWith:#(73 67)) ifTrue:[ "IC"
- inStream position:1.
+ aStream position:1.
'WINREADER: OS/2 IC format' errorPrintNL.
- ^ self fromOS2Stream
+ ^ self fromOS2Stream:aStream
].
(header startsWith:#(80 84)) ifTrue:[ "PT"
- inStream position:1.
+ aStream position:1.
'WINREADER: OS/2 PT format' errorPrintNL.
- ^ self fromOS2Stream
+ ^ self fromOS2Stream:aStream
].
(header startsWith:#(0 0 1 0)) ifTrue:[
- inStream position:1.
+ aStream position:1.
'WINREADER: Win3.x ICO format' errorPrintNL.
- ^ self fromWindowsICOStream
+ ^ self fromWindowsICOStream:aStream
].
- self error:'WINREADER: format not supported'.
- inStream close.
+ 'WINREADER: format not supported' errorPrintNL.
^ nil
"
@@ -366,26 +373,27 @@
"
!
-fromOS2Stream
+fromOS2Stream:aStream
| header inDepth
rawMap rMap gMap bMap srcIndex dstIndex
data4 mask tmp bytesPerRow nColors nByte|
- inStream binary.
+ inStream := aStream.
+ aStream binary.
"read the header"
header := ByteArray uninitializedNew:8r110.
- inStream nextBytes:16 into:header.
+ aStream nextBytes:16 into:header.
(header startsWith:#(73 67)) ifTrue:[
"IC format"
- inStream nextBytes:10 into:header startingAt:17.
+ aStream nextBytes:10 into:header startingAt:17.
width := header at:7.
height := header at:9.
inDepth := 2 "header at:11". "where is it"
] ifFalse:[
- inStream nextBytes:(8r110-16) into:header startingAt:17.
+ aStream nextBytes:(8r110-16) into:header startingAt:17.
width := header at:8r101.
height := header at:8r103.
inDepth := header at:8r107.
@@ -396,7 +404,7 @@
nColors := 1 bitShift:inDepth.
rawMap := ByteArray uninitializedNew:(nColors*3).
- inStream nextBytes:(nColors*3) into:rawMap.
+ aStream nextBytes:(nColors*3) into:rawMap.
rMap := Array new:nColors.
gMap := Array new:nColors.
bMap := Array new:nColors.
@@ -414,17 +422,17 @@
nByte := width * height + 7 // 8.
mask := ByteArray uninitializedNew:nByte.
- inStream nextBytes:nByte into:mask.
+ aStream nextBytes:nByte into:mask.
"what is this"
- inStream nextBytes:nByte into:mask.
+ aStream nextBytes:nByte into:mask.
"read the data bits"
bytesPerRow := width * inDepth + 7 // 8.
data4 := ByteArray uninitializedNew:(height * bytesPerRow).
- inStream nextBytes:(height * bytesPerRow) into:data4.
+ aStream nextBytes:(height * bytesPerRow) into:data4.
"stupid: last row first"
@@ -448,9 +456,7 @@
photometric := #palette.
samplesPerPixel := 1.
bitsPerSample := #(8).
-"/ colorMap := Array with:rMap with:gMap with:bMap.
colorMap := Colormap redVector:rMap greenVector:gMap blueVector:bMap.
- inStream close.
"
|i f|