PICTReader.st
author Claus Gittinger <cg@exept.de>
Mon, 01 Sep 2003 11:52:06 +0200
changeset 1804 f84ff77deaea
child 1806 69e71e3497c0
permissions -rw-r--r--
initial checkin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1804
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
 COPYRIGHT (c) 1993 by Claus Gittinger
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
	      All Rights Reserved
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 hereby transferred.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
"{ Package: 'stx:libview2' }"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
ImageReader subclass:#PICTReader
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
	instanceVariableNames:''
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	classVariableNames:''
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	poolDictionaries:''
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	category:'Graphics-Images-Readers'
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
!
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
!PICTReader class methodsFor:'documentation'!
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
copyright
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
 COPYRIGHT (c) 1993 by Claus Gittinger
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
	      All Rights Reserved
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
 This software is furnished under a license and may be used
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
 only in accordance with the terms of that license and with the
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
 inclusion of the above copyright notice.   This software may not
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
 be provided or otherwise made available to, or used by, any
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
 other person.  No title to or ownership of the software is
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
 hereby transferred.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
!
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
documentation
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
    this class provides methods for loading Sun Raster and
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    Sun Icon file images.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    No image writing is implemented.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
    [See also:]
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
        Image Form Icon
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
        BlitImageReader FaceReader JPEGReader GIFReader PBMReader PCXReader 
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
        ST80FormReader TargaReader TIFFReader WindowsIconReader 
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
        XBMReader XPMReader XWDReader 
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
!
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
examples
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
  example8
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
  --- Version 1 PICTure ---
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
    | array image |
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
    array := #[
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
    16r00 16r4F
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
    16r00 16r02 16r00 16r02 16r00 16r6E 16r00 16rAA
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
    16r11
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
            16r01
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
    16r01
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
            16r00 16r0A
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
            16r00 16r02 16r00 16r02 16r00 16r6E 16r00 16rAA
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
    16r0A
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
            16r77 16rDD 16r77 16rDD 16r77 16rDD 16r77 16rDD
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
    16r34
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
            16r00 16r02 16r00 16r02 16r00 16r6E 16r00 16rAA
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
    16r0A
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
            16r88 16r22 16r88 16r22 16r88 16r22 16r88 16r22
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
    16r5C
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
    16r71
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
            16r00 16r1A
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
            16r00 16r02 16r00 16r02 16r00 16r6E 16r00 16rAA
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
            16r00 16r6E 16r00 16r02 16r00 16r02 16r00 16r54 16r00 16r6E 16r00 16rAA 16r00 16r6E 16r00 16r02
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    16rFF
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
    ].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
    image := PICTReader fromStream: (ReadStream on: array).
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
! !
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
!PICTReader class methodsFor:'initialization'!
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
initialize
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    "install myself in the Image classes fileFormat table
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
     for the `.icon' and '.im8' extensions."
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
    MIMETypes defineImageType:nil suffix:'icon' reader:self.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
    MIMETypes defineImageType:nil suffix:'im8'  reader:self.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
    "Modified: 1.2.1997 / 15:08:40 / cg"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
! !
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
!PICTReader class methodsFor:'testing'!
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
isValidImageFile:aFileName
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
    "return true, if aFileName contains a sunraster image"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
    |inStream nr|
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
    inStream := self streamReadingFile:aFileName.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
    inStream isNil ifTrue:[^ false].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
    "try sun raster"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
    inStream binary.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
    ((inStream nextWord == 16r59A6) 
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
    and:[inStream nextWord == 16r6A95]) ifTrue: [
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
	inStream close.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
	^ true
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
    ].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
    inStream isPositionable ifFalse:[^ false].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
    "try sun bitmap image format"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
    inStream text.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
    inStream reset.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
    "must start with a comment"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
    inStream skipSeparators.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
    inStream next ~~ $/ ifTrue:[^ false].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
    inStream next ~~ $* ifTrue:[^ false].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
    (inStream skipThroughAll: 'idth') isNil ifTrue: [
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
	inStream close.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
	^ false
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
    ].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
    inStream next; skipSeparators.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
    nr := Integer readFrom: inStream.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
    (nr isNil or:[nr <= 0]) ifTrue: [
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
	inStream close.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
	^ false
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
    ].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
    (inStream skipThroughAll: 'eight') isNil ifTrue: [
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
	inStream close.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
	^ false
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
    ].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
    inStream next; skipSeparators.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
    nr := Integer readFrom: inStream.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
    (nr isNil or:[nr <= 0]) ifTrue: [
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
	inStream close.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
	^ false
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
    ].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
    inStream close.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
    ^ true
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
! !
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
!PICTReader methodsFor:'reading from file'!
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
fromStream: aStream 
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
    "read an image in my format from aStream.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
     Dtermine if its a raster or icon file."
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
    | rasterType mapType mapBytes imageWords form depth 
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
      rMap gMap bMap mapLen
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
      a b c index pos|
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
    inStream := aStream.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
    aStream binary.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
    pos := aStream position.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
    ((aStream nextWord == 16r59A6) 
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
    and:[aStream nextWord == 16r6A95]) ifFalse: [
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
"/        'SUNReader: not a SunRaster file' errorPrintNL.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
        aStream position:pos.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
        ^ self fromSunIconStream:aStream
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
    ].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
    width := aStream nextLong.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
    height := aStream nextLong.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
    depth := aStream nextLong.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
    aStream nextLong.   "Ignore the image length since I can't rely on it anyway."
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
    rasterType := aStream nextLong.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
    mapType := aStream nextLong.  "Ignore the raster maptype."
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
    mapBytes := aStream nextLong.  
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
    depth = 8 ifTrue: [
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
        mapLen := (mapBytes // 3).
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
        rMap := aStream nextBytes:mapLen.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
        gMap := aStream nextBytes:mapLen.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
        bMap := aStream nextBytes:mapLen.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
        colorMap := MappedPalette redVector:rMap greenVector:gMap blueVector:bMap.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
        data := ByteArray uninitializedNew:(width * height).
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
        aStream nextBytes:(width * height) into:data.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
        photometric := #palette.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
        samplesPerPixel := 1.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
        bitsPerSample := #(8).
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
        ^ self
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
    ].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
    depth ~~ 1 ifTrue: [
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
        ^ self fileFormatError:'only depth 1 and 8 supported'.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
    ].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
    form := nil.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
    aStream skip: mapBytes.  "Skip the color map."
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
    imageWords := (width / 16) ceiling * height.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
    data := ByteArray uninitializedNew:(imageWords * 2).
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
    (rasterType between: 0 and: 2) ifFalse: [
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
        ^ self fileFormatError:'Unknown raster file rasterType'.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
    ].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
    (rasterType = 2)  ifFalse: [
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
        "no compression of bytes"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
        aStream nextBytes:(imageWords * 2) into:data
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
    ] ifTrue: [ 
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
        "run length compression of bytes"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
        index := 1.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
        a := aStream next.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
        [a notNil] whileTrue: [
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
            (a = 128) ifFalse: [
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
                data at:index put: a.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
                index := index + 1
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
            ] ifTrue: [
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
                b := aStream next.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
                b = 0 ifTrue: [
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
                    data at:index put:128 .
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
                    index := index + 1
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
                ] ifFalse: [
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
                    c := aStream next.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
                    1 to:(b+1) do:[:i |
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
                        data at:index put:c.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
                        index := index + 1
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
                    ]
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
                ]
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
            ].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
            a := aStream next
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
        ].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
    ].
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
    photometric := #whiteIs0.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
    samplesPerPixel := 1.
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
    bitsPerSample := #(1).
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
    "
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
     Image fromFile:'bitmaps/founders.im8'
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
     Image fromFile:'bitmaps/bf.im8'
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
     SunRasterReader fromStream:'bitmaps/founders.im8' asFilename readStream
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
     SunRasterReader fromStream:'bitmaps/bf.im8' asFilename readStream
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
    "
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
    "Modified: / 3.2.1998 / 18:00:35 / cg"
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
! !
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
!PICTReader class methodsFor:'documentation'!
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
version
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
    ^ '$Header: /cvs/stx/stx/libview2/PICTReader.st,v 1.1 2003-09-01 09:52:06 cg Exp $'
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
! !
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
f84ff77deaea initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
PICTReader initialize!