XWDReader.st
author Claus Gittinger <cg@exept.de>
Wed, 29 Jan 1997 23:09:59 +0100
changeset 390 d00bee0b624a
parent 259 62b1bbafd9ba
child 391 b27a2bb9e3f4
permissions -rw-r--r--
checkin from browser
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
44
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
     1
"
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
     2
     COPYRIGHT (c) 1995 by Claus Gittinger
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
     3
              All Rights Reserved
44
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
     4
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
     5
     This software is furnished under a license and may be used
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
     6
     only in accordance with the terms of that license and with the
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
     7
     inclusion of the above copyright notice.   This software may not
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
     8
     be provided or otherwise made available to, or used by, any
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
     9
     other person.  No title to or ownership of the software is
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    10
     hereby transferred.
51
ac84315b8181 *** empty log message ***
claus
parents: 49
diff changeset
    11
ac84315b8181 *** empty log message ***
claus
parents: 49
diff changeset
    12
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    13
     The above copyright does not apply to:
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    14
        XWDReader>>save:onFile:
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    15
     which was written by Brad Schoening <brad@boole.com> 
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    16
     who placed it into the public domain.
44
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
    17
"
42
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    18
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    19
ImageReader subclass:#RGBReader
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    20
	instanceVariableNames:''
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    21
	classVariableNames:''
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    22
	poolDictionaries:''
259
62b1bbafd9ba category change
Claus Gittinger <cg@exept.de>
parents: 234
diff changeset
    23
	category:'Graphics-Images-Support'
42
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    24
!
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    25
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    26
!RGBReader class methodsFor:'documentation'!
44
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
    27
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
    28
copyright
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
    29
"
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    30
     COPYRIGHT (c) 1995 by Claus Gittinger
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    31
              All Rights Reserved
44
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
    32
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    33
     This software is furnished under a license and may be used
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    34
     only in accordance with the terms of that license and with the
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    35
     inclusion of the above copyright notice.   This software may not
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    36
     be provided or otherwise made available to, or used by, any
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    37
     other person.  No title to or ownership of the software is
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    38
     hereby transferred.
51
ac84315b8181 *** empty log message ***
claus
parents: 49
diff changeset
    39
ac84315b8181 *** empty log message ***
claus
parents: 49
diff changeset
    40
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    41
     The above copyright does not apply to:
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    42
        XWDReader>>save:onFile:
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    43
     which was written by Brad Schoening <brad@boole.com> 
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    44
     who placed it into the public domain.
44
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
    45
"
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
    46
!
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
    47
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
    48
documentation
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
    49
"
205
ddb3c0dfcc0d commentary
Claus Gittinger <cg@exept.de>
parents: 204
diff changeset
    50
    this class provides methods for loading/saving of x-window dump (xwd) images.
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    51
    Both reading and writing of images is supported.
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    52
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    53
    [See also:]
234
b6352d13e792 xrefs in documentation
Claus Gittinger <cg@exept.de>
parents: 210
diff changeset
    54
        Image Form Icon
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    55
        BlitImageReader FaceReader GIFReader JPEGReader PBMReader PCXReader 
210
5405de794686 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 205
diff changeset
    56
        ST80FormReader SunRasterReader TargaReader TIFFReader WindowsIconReader 
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    57
        XBMReader XPMReader 
44
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
    58
"
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
    59
! !
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
    60
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    61
!RGBReader class methodsFor:'queries'!
51
ac84315b8181 *** empty log message ***
claus
parents: 49
diff changeset
    62
ac84315b8181 *** empty log message ***
claus
parents: 49
diff changeset
    63
canRepresent:anImage
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    64
    "return true, if anImage can be represented in my file format."
51
ac84315b8181 *** empty log message ***
claus
parents: 49
diff changeset
    65
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    66
    ^ false
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    67
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    68
    "Modified: 29.1.1997 / 22:38:08 / cg"
51
ac84315b8181 *** empty log message ***
claus
parents: 49
diff changeset
    69
! !
ac84315b8181 *** empty log message ***
claus
parents: 49
diff changeset
    70
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    71
!RGBReader methodsFor:'image reading'!
42
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    72
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
    73
fromStream:aStream 
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    74
    "read an image in RGB (IRIS image format) format from aStream."
42
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    75
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    76
    |magic type t dim width height min max
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    77
     wasteBytes buffer name clrMap header nColors pad 
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    78
     srcRowByteSize bytesPerRow bytesPerPixel colormapSize depth 
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    79
     dstIndex tableSize rowStartTable rowSizeTable|
42
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    80
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    81
    aStream binary.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    82
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    83
    magic := aStream nextUnsignedShortMSB:true.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    84
    magic ~~ 8r732 ifTrue:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    85
        'RGBReader [warning]: bad magic' errorPrintCR.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    86
        ^ nil
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    87
    ].
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    88
    type := aStream nextUnsignedShortMSB:true.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    89
    bytesPerPixel := type bitAnd: 16r00FF.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    90
    t := type bitAnd: 16rFF00.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    91
    t == 16r0000 ifTrue:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    92
        "/ verbatim
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    93
        type := #verbatim.
42
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    94
    ] ifFalse:[
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    95
        t == 16r0100 ifTrue:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    96
            "/ rle
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    97
            type := #rle
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    98
        ] ifFalse:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
    99
            'RGBReader [warning]: bad type' errorPrintCR.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   100
            ^ nil
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   101
        ].
42
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
   102
    ].
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   103
'type: ' print. type printCR.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   104
'bpp: ' print. bytesPerPixel printCR.
42
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
   105
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   106
    dim := aStream nextUnsignedShortMSB:true.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   107
'dim: ' print. dim printCR.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   108
    width := aStream nextUnsignedShortMSB:true.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   109
'w: ' print. width printCR.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   110
    height := aStream nextUnsignedShortMSB:true.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   111
'h: ' print. height printCR.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   112
    samplesPerPixel := aStream nextUnsignedShortMSB:true.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   113
'z: ' print. samplesPerPixel printCR.
44
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
   114
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   115
    min := aStream nextUnsignedLongMSB:true.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   116
'min: ' print. min printCR.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   117
     max := aStream nextUnsignedLongMSB:true.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   118
'max: ' print. max printCR.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   119
    wasteBytes := aStream nextUnsignedLongMSB:true.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   120
'waste: ' print. wasteBytes printCR.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   121
    name := aStream nextBytes:80 into:(buffer := ByteArray new:80).
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   122
    name := buffer asString.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   123
name printCR.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   124
    clrMap := aStream nextUnsignedLongMSB:true.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   125
'clrmap: ' print. clrMap printCR.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   126
    clrMap == 0 ifTrue:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   127
        "/ cm_normal
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   128
    ] ifFalse:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   129
        clrMap == 1 ifTrue:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   130
            "/ cm_dithered
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   131
        ] ifFalse:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   132
            clrMap == 2 ifTrue:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   133
                "/ cm_screen
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   134
            ] ifFalse:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   135
                clrMap == 3 ifTrue:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   136
                    "/ cm_colormap
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   137
                ] ifFalse:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   138
                    'RGBReader [warning]: bad colormap' errorPrintCR.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   139
                    ^ nil
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   140
                ]
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   141
            ]
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   142
        ]
44
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
   143
    ].
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
   144
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   145
    bytesPerPixel ~~ 1 ifTrue:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   146
        'RGBReader [warning]: unhandeld bpp' errorPrintCR.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   147
        ^ nil
44
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
   148
    ].
42
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
   149
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   150
    type == #rle ifTrue:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   151
        aStream position:513.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   152
        tableSize := height * samplesPerPixel * 4.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   153
        rowStartTable := ByteArray new:tableSize.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   154
        rowSizeTable := ByteArray new:tableSize.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   155
        (aStream nextBytes:tableSize into:rowStartTable) ~~ tableSize ifTrue:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   156
            'RGBReader [warning]: short read' errorPrintCR.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   157
            ^ nil
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   158
        ].
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   159
        (aStream nextBytes:tableSize into:rowSizeTable) ~~ tableSize ifTrue:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   160
            'RGBReader [warning]: short read' errorPrintCR.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   161
            ^ nil
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   162
        ].
44
c6cf7d0d6337 *** empty log message ***
claus
parents: 42
diff changeset
   163
    ] ifFalse:[
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   164
        'RGBReader [warning]: only rle is handled' errorPrintCR.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   165
        ^ nil
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   166
    ].
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   167
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   168
    type == #rle ifTrue:[
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   169
        0 to:height-1 do:[:y |
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   170
        ].
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   171
    ].
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   172
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   173
    self halt.
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   174
42
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
   175
    "
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   176
     RGBReader fromFile:'/home/cg/capture.rgb'
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   177
49
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   178
    "
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   179
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   180
    "Modified: 29.1.1997 / 23:09:50 / cg"
42
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
   181
! !
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
   182
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   183
!RGBReader methodsFor:'image writing'!
49
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   184
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   185
save:image onFile:fileName
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   186
    "Save as a version 7 color X11 window dump file (xwd) to the file fileName.
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   187
     This produces a mapped color table with 16 bit color.  The xwd file can be 
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   188
     viewed by the xwud program and printed with xpr.  
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   189
     No compression is performed.
49
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   190
205
ddb3c0dfcc0d commentary
Claus Gittinger <cg@exept.de>
parents: 204
diff changeset
   191
     See the file ...include/X11/XWDFile.h for a definition of the format."
49
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   192
205
ddb3c0dfcc0d commentary
Claus Gittinger <cg@exept.de>
parents: 204
diff changeset
   193
    "
49
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   194
     Notice:
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   195
        this method was adapted from a goody in the uiuc archive 
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   196
        (Prime time freeware).
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   197
        The original files header is:
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   198
            NAME            imageToXWD
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   199
            AUTHOR          Brad Schoening <brad@boole.com>
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   200
            FUNCTION        Writes a Smalltalk image to an X11 xwd file
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   201
            ST-VERSION      PPST 4.0 or 4.1
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   202
            DISTRIBUTION    world
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   203
            VERSION         1.0
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   204
            DATE            July 1993
51
ac84315b8181 *** empty log message ***
claus
parents: 49
diff changeset
   205
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   206
        thanks to Brad for giving us the base for this mehtod.
49
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   207
    "
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   208
83
claus
parents: 51
diff changeset
   209
    |aStream rgbColor paletteColors ncolors dumpName headerSize|
49
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   210
51
ac84315b8181 *** empty log message ***
claus
parents: 49
diff changeset
   211
    (self class canRepresent:image) ifFalse:[
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   212
        self error:'XWD format only supports 8bit palette images'.
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   213
        ^ nil
49
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   214
    ].
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   215
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   216
    dumpName := 'stdin'.
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   217
    headerSize := 4 * (25 + (dumpName size / 4) ceiling).
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   218
    paletteColors := image palette "colors".
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   219
    ncolors := paletteColors size.
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   220
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   221
    "create the header (each item is 32 bits long)"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   222
    aStream := fileName asFilename writeStream.
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   223
    aStream binary.
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   224
    aStream nextLongPut: headerSize.                                "total header size in bytes"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   225
    aStream nextLongPut: 7.                                         "XWD file version"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   226
    aStream nextLongPut: 2.                                         "pixmap format : ZPixmap"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   227
    aStream nextLongPut: 8.                                         "pixmap depth"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   228
    aStream nextLongPut: image width.                               "pixmap cols"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   229
    aStream nextLongPut: image height.                              "pixmap rows"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   230
    aStream nextLongPut: 0.                                         "bitmap x offset"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   231
    aStream nextLongPut: 1.                                         "byte order: MSBFirst"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   232
    aStream nextLongPut: 8.                                         "bitmap unit"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   233
    aStream nextLongPut: 1.                                         "bitmap bit order: MSBFirst"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   234
    aStream nextLongPut: 8.                                         "bitmap scanline pad"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   235
    aStream nextLongPut: 8.                                         "bits per pixel"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   236
    aStream nextLongPut: image width.                               "bytes per scanline"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   237
    aStream nextLongPut: 3.                                         "colormap class : PseudoColor"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   238
    aStream nextLongPut: 0.                                         "Z red mask"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   239
    aStream nextLongPut: 0.                                         "Z green mask"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   240
    aStream nextLongPut: 0.                                         "Z blue mask"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   241
    aStream nextLongPut: 8.                                         "bits per rgb"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   242
    aStream nextLongPut: 256.                                       "number of color map entries"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   243
    aStream nextLongPut: ncolors.                                   "number of color structures"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   244
    aStream nextLongPut: image width.                               "window width"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   245
    aStream nextLongPut: image height.                              "window height"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   246
    aStream nextLongPut: 0.                                         "window upper left x coordinate"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   247
    aStream nextLongPut: 0.                                         "window upper left y coordinate"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   248
    aStream nextLongPut: 0.                                         "window border width"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   249
    aStream nextPutAll: dumpName asByteArray.       "name of dump"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   250
    "Pad the string to the next 32-bit boundary"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   251
    aStream nextPut: 0. "/ 6
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   252
    aStream nextPut: 0. "/ 7
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   253
    aStream nextPut: 0. "/ 8
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   254
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   255
"/    [(aStream position rem: 4) == 0] whileFalse: [ aStream nextPut: 0 ].
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   256
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   257
    "Write out the color table.  Each color table entry is 12 bytes long composed of:
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   258
                    an index                (4 bytes)
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   259
                    red color value         (2 bytes)
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   260
                    green color value       (2 bytes)
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   261
                    blue color value        (2 bytes)
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   262
                    flag values             (1 byte)
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   263
                    pad                     (1 byte)
49
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   264
    "
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   265
    0 to: ncolors-1 do: [ :index |
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   266
        |r g b|
49
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   267
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   268
        aStream nextLongPut: index.
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   269
        rgbColor := paletteColors at: (1+index).
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   270
        (rgbColor isNil) ifTrue: [ rgbColor := ColorValue white ].
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   271
        r := (rgbColor red / 100.0 * 65535) rounded.
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   272
        g := (rgbColor green / 100.0 * 65535) rounded.
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   273
        b := (rgbColor blue / 100.0 * 65535) rounded.
49
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   274
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   275
        aStream nextWordPut:r.
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   276
        aStream nextWordPut:g.
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   277
        aStream nextWordPut:b.
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   278
        aStream nextPut: 7.                     "flags"
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   279
        aStream nextPut: 0.                     "pad"
49
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   280
    ].
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   281
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   282
    "Write out the pixels as index color values"
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   283
"/    Cursor write showWhile: [ 
99
claus
parents: 96
diff changeset
   284
"/            |cindex|
83
claus
parents: 51
diff changeset
   285
"/
49
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   286
"/            1 to: (image height) do: [ :row |
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   287
"/                    1 to: (image width) do: [ :col |
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   288
"/                            cindex := image atPoint: (col-1)@(row-1).
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   289
"/                            aStream nextPut: cindex.]]
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   290
"/    ].
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   291
    aStream nextPutAll:image bits.
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   292
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   293
    aStream close
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   294
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   295
    "
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   296
     XWDReader save:(Image fromUser) onFile: '/tmp/st.xwd' 
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   297
     (Image fromFile: '/tmp/st.xwd') inspect 
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   298
    "
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   299
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   300
    "Created: 29.1.1997 / 22:37:48 / cg"
49
f7938135fb9a *** empty log message ***
claus
parents: 46
diff changeset
   301
! !
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   302
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   303
!RGBReader class methodsFor:'documentation'!
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   304
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   305
version
390
d00bee0b624a checkin from browser
Claus Gittinger <cg@exept.de>
parents: 259
diff changeset
   306
    ^ '$Header: /cvs/stx/stx/libview2/XWDReader.st,v 1.16 1997-01-29 22:09:59 cg Exp $'
204
277d2523d8cb commentary
Claus Gittinger <cg@exept.de>
parents: 114
diff changeset
   307
! !