XWDReader.st
author claus
Sat, 18 Feb 1995 16:52:56 +0100
changeset 42 ab4cc6362a80
child 44 c6cf7d0d6337
permissions -rw-r--r--
Initial revision
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
42
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
     1
'From Smalltalk/X, Version:2.10.4 on 18-feb-1995 at 3:27:03 am'!
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
     2
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
     3
ImageReader subclass:#XWDReader
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
     4
	 instanceVariableNames:''
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
     5
	 classVariableNames:''
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
     6
	 poolDictionaries:''
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
     7
	 category:'Graphics-Images support'
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
     8
!
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
     9
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    10
!XWDReader methodsFor:'image reading'!
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    11
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    12
fromStream: aStream 
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    13
        "read an image in XWD (X Window Dump) format."
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    14
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    15
    |header nColors palette res colors pad srcRowByteSize bitsPerPixel mask colormapSize depth |
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    16
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    17
    aStream binary.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    18
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    19
    header := (1 to: 25) collect: [:i | aStream nextLong].
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    20
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    21
    "skip ..."
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    22
    101 to:(header at: 1) do: [:i | aStream next].
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    23
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    24
    depth := header at: 4.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    25
    width := header at: 5.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    26
    height := header at: 6.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    27
    pad := header at: 11.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    28
    bitsPerPixel := header at: 12.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    29
    bitsPerPixel == 24 ifTrue:[
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    30
        bitsPerSample := #(8 8 8).
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    31
        samplesPerPixel := 3.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    32
        photometric := #rgb
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    33
    ] ifFalse:[
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    34
        bitsPerSample := Array with:bitsPerPixel.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    35
        samplesPerPixel := 1.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    36
        photometric := #palette
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    37
    ].
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    38
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    39
    colormapSize := header at: 19.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    40
    nColors := header at: 20.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    41
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    42
    colorMap := Array new:depth * depth.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    43
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    44
    1 to:nColors do:[:i |
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    45
        |clr|
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    46
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    47
        aStream nextLong.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    48
        clr := Color scaledRed: (aStream nextWord bitShift: -3)
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    49
                     scaledGreen: (aStream nextWord bitShift: -3)
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    50
                     scaledBlue: (aStream nextWord bitShift: -3).
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    51
        colorMap at:i put:clr.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    52
        aStream nextWord.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    53
   ].
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    54
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    55
    nColors+1 to:(depth * depth) do: [:i | colorMap at:i put:Color black].
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    56
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    57
    srcRowByteSize := width * bitsPerPixel + pad - 1 // pad * (pad / 8).
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    58
    data := ByteArray uninitializedNew: srcRowByteSize * height.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    59
    aStream nextBytes:srcRowByteSize * height into:data.
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    60
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    61
    "
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    62
     XWDReader fromFile:'/phys/clam/claus/smalltalk/private_classes/hpdst/pixmaps/bike.xwd'
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    63
    "
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    64
! !
ab4cc6362a80 Initial revision
claus
parents:
diff changeset
    65