Colormap.st
author Claus Gittinger <cg@exept.de>
Fri, 19 Apr 1996 12:45:59 +0200
changeset 572 b164eb8a3e6e
parent 285 1effedd62f30
child 602 f4827cf7d3f9
permissions -rw-r--r--
commentary
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
91
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
     1
"
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
     2
 COPYRIGHT (c) 1994 by Claus Gittinger
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
     3
	      All Rights Reserved
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
     4
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    11
"
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    12
118
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    13
SequenceableCollection subclass:#Colormap
572
b164eb8a3e6e commentary
Claus Gittinger <cg@exept.de>
parents: 285
diff changeset
    14
	instanceVariableNames:'redVector greenVector blueVector'
b164eb8a3e6e commentary
Claus Gittinger <cg@exept.de>
parents: 285
diff changeset
    15
	classVariableNames:''
b164eb8a3e6e commentary
Claus Gittinger <cg@exept.de>
parents: 285
diff changeset
    16
	poolDictionaries:''
b164eb8a3e6e commentary
Claus Gittinger <cg@exept.de>
parents: 285
diff changeset
    17
	category:'Graphics-Images support'
91
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    18
!
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    19
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    20
!Colormap class methodsFor:'documentation'!
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    21
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    22
copyright
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    23
"
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    24
 COPYRIGHT (c) 1994 by Claus Gittinger
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    25
	      All Rights Reserved
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    26
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    27
 This software is furnished under a license and may be used
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    28
 only in accordance with the terms of that license and with the
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    29
 inclusion of the above copyright notice.   This software may not
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    30
 be provided or otherwise made available to, or used by, any
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    31
 other person.  No title to or ownership of the software is
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    32
 hereby transferred.
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    33
"
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    34
!
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    35
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    36
documentation
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    37
"
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    38
    Colormaps are used with images (and Forms) to keep the byte-to-color
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    39
    mapping.
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    40
    Internally, the values are stored as 3 separate byte-arrays
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    41
    (i.e. individual components can be 0..255).
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    42
"
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    43
! !
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    44
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    45
!Colormap class methodsFor:'instance creation'!
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    46
118
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    47
fromColors:aColorArray
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    48
    |n rV gV bV|
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    49
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    50
    n := aColorArray size.
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    51
    rV := ByteArray new:n.
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    52
    gV := ByteArray new:n.
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    53
    bV := ByteArray new:n.
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    54
    1 to:n do:[:i |
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    55
	|clr|
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    56
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    57
	clr := aColorArray at:i.
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    58
	rV at:i put:(clr red * 255 / 100) rounded.
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    59
	bV at:i put:(clr green * 255 / 100) rounded.
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    60
	gV at:i put:(clr blue * 255 / 100) rounded.
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    61
    ].
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    62
    ^ self new redVector:rV greenVector:gV blueVector:bV
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    63
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    64
    "
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    65
     Colormap 
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    66
	fromColors:(Array with:Color black
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    67
			  with:Color red
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    68
			  with:Color white)
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
    69
    "
91
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    70
!
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    71
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    72
redVector:r greenVector:g blueVector:b
285
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    73
    ^ self new redVector:r greenVector:g blueVector:b
91
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    74
285
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    75
    "
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    76
     Colormap 
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    77
	redVector:#[0 127 255]
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    78
	greenVector:#[0 127 255]
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    79
	blueVector:#[0 127 255]
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    80
    "
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    81
! !
91
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    82
285
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
    83
!Colormap methodsFor:'accessing'!
91
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    84
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    85
at:index 
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    86
    "return the color at index - notice, that index is a typically derived
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    87
     from an images pixel value which ranges 0..255; while the index here
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    88
     starts at 1 (to make colormap look more like a collection)."
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    89
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    90
    |r g b|
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    91
    r := redVector at:index.
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    92
    g := greenVector at:index.
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    93
    b := blueVector at:index.
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    94
    ^ Color
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    95
	red:(r * 100 / 255)
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    96
	green:(g * 100 / 255)
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    97
	blue:(b * 100 / 255)
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    98
!
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
    99
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   100
at:index put:aColor
572
b164eb8a3e6e commentary
Claus Gittinger <cg@exept.de>
parents: 285
diff changeset
   101
    "set the color at index to aColor. Return aColor (sigh).
b164eb8a3e6e commentary
Claus Gittinger <cg@exept.de>
parents: 285
diff changeset
   102
     - notice, that a color index is a typically derived
b164eb8a3e6e commentary
Claus Gittinger <cg@exept.de>
parents: 285
diff changeset
   103
       from an images pixel value which ranges 0..255; 
b164eb8a3e6e commentary
Claus Gittinger <cg@exept.de>
parents: 285
diff changeset
   104
       while the index here starts at 1 
b164eb8a3e6e commentary
Claus Gittinger <cg@exept.de>
parents: 285
diff changeset
   105
       (to make colormap look more like a collection).
b164eb8a3e6e commentary
Claus Gittinger <cg@exept.de>
parents: 285
diff changeset
   106
       Therefore, to modify a colorMap entry for pixel i, change
b164eb8a3e6e commentary
Claus Gittinger <cg@exept.de>
parents: 285
diff changeset
   107
       the colorMaps slot at i+1."
91
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   108
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   109
    |r g b|
572
b164eb8a3e6e commentary
Claus Gittinger <cg@exept.de>
parents: 285
diff changeset
   110
91
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   111
    r := (aColor red * 255 / 100) rounded.
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   112
    g := (aColor green * 255 / 100) rounded.
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   113
    b := (aColor blue * 255 / 100) rounded.
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   114
    redVector at:index put:r.
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   115
    greenVector at:index put:g.
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   116
    blueVector at:index put:b.
572
b164eb8a3e6e commentary
Claus Gittinger <cg@exept.de>
parents: 285
diff changeset
   117
    ^ aColor
b164eb8a3e6e commentary
Claus Gittinger <cg@exept.de>
parents: 285
diff changeset
   118
b164eb8a3e6e commentary
Claus Gittinger <cg@exept.de>
parents: 285
diff changeset
   119
    "Modified: 19.4.1996 / 11:19:04 / cg"
118
25e775072a89 *** empty log message ***
claus
parents: 91
diff changeset
   120
!
91
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   121
285
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   122
blueAt:index
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   123
    "return the blue component at some index.
153
claus
parents: 118
diff changeset
   124
     The returned value is scaled from the internal 0.. 255 to
claus
parents: 118
diff changeset
   125
     a percentage value 0..100"
claus
parents: 118
diff changeset
   126
285
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   127
    ^ (blueVector at:index) * 100 / 255
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   128
!
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   129
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   130
blueVector
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   131
    "return blueVector"
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   132
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   133
    ^ blueVector
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   134
!
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   135
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   136
blueVector:something
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   137
    "set blueVector"
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   138
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   139
    blueVector := something.
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   140
!
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   141
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   142
colors
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   143
    "ST-80 compatibility: return a collection containing the colors I hold"
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   144
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   145
    ^ self asArray
153
claus
parents: 118
diff changeset
   146
!
claus
parents: 118
diff changeset
   147
claus
parents: 118
diff changeset
   148
greenAt:index
claus
parents: 118
diff changeset
   149
    "return the green component at some index.
claus
parents: 118
diff changeset
   150
     The returned value is scaled from the internal 0.. 255 to
claus
parents: 118
diff changeset
   151
     a percentage value 0..100"
claus
parents: 118
diff changeset
   152
claus
parents: 118
diff changeset
   153
    ^ (greenVector at:index) * 100 / 255
claus
parents: 118
diff changeset
   154
!
claus
parents: 118
diff changeset
   155
285
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   156
greenVector
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   157
    "return greenVector"
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   158
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   159
    ^ greenVector
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   160
!
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   161
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   162
greenVector:something
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   163
    "set greenVector"
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   164
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   165
    greenVector := something.
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   166
!
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   167
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   168
redAt:index
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   169
    "return the red component at some index.
153
claus
parents: 118
diff changeset
   170
     The returned value is scaled from the internal 0.. 255 to
claus
parents: 118
diff changeset
   171
     a percentage value 0..100"
claus
parents: 118
diff changeset
   172
285
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   173
    ^ (redVector at:index) * 100 / 255
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   174
!
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   175
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   176
redVector
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   177
    "return redVector"
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   178
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   179
    ^ redVector
153
claus
parents: 118
diff changeset
   180
!
claus
parents: 118
diff changeset
   181
285
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   182
redVector:something
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   183
    "set redVector"
153
claus
parents: 118
diff changeset
   184
285
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   185
    redVector := something.
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   186
!
91
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   187
285
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   188
redVector:r greenVector:g blueVector:b
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   189
    redVector := r.
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   190
    greenVector := g.
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   191
    blueVector := b.
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   192
!
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   193
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   194
size
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   195
    ^ redVector size
91
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   196
! !
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   197
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   198
!Colormap methodsFor:'misc'!
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   199
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   200
scaleValuesBy:scaleFactor
153
claus
parents: 118
diff changeset
   201
   "multiply all values by scaleFactor; finally round to integer.
claus
parents: 118
diff changeset
   202
    This can be used to brighten/darken an images colormap"
91
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   203
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   204
   1 to:redVector size do:[:index |
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   205
	redVector at:index put:((redVector at:index) * scaleFactor) rounded.
153
claus
parents: 118
diff changeset
   206
	greenVector at:index put:((greenVector at:index) * scaleFactor) rounded.
claus
parents: 118
diff changeset
   207
	blueVector at:index put:((blueVector at:index) * scaleFactor) rounded.
91
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   208
   ]
03c73c3b1d57 Initial revision
claus
parents:
diff changeset
   209
! !
285
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   210
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   211
!Colormap class methodsFor:'documentation'!
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   212
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   213
version
572
b164eb8a3e6e commentary
Claus Gittinger <cg@exept.de>
parents: 285
diff changeset
   214
    ^ '$Header: /cvs/stx/stx/libview/Colormap.st,v 1.6 1996-04-19 10:45:59 cg Exp $'
285
1effedd62f30 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 219
diff changeset
   215
! !