"
COPYRIGHT (c) 1994 by Claus Gittinger
All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
"
SequenceableCollection subclass:#Colormap
instanceVariableNames:'redVector greenVector blueVector'
classVariableNames:''
poolDictionaries:''
category:'Graphics-Images support'
!
Colormap comment:'
COPYRIGHT (c) 1994 by Claus Gittinger
All Rights Reserved
$Header: /cvs/stx/stx/libview/Colormap.st,v 1.2 1995-03-18 05:10:02 claus Exp $
'!
!Colormap class methodsFor:'documentation'!
copyright
"
COPYRIGHT (c) 1994 by Claus Gittinger
All Rights Reserved
This software is furnished under a license and may be used
only in accordance with the terms of that license and with the
inclusion of the above copyright notice. This software may not
be provided or otherwise made available to, or used by, any
other person. No title to or ownership of the software is
hereby transferred.
"
!
version
"
$Header: /cvs/stx/stx/libview/Colormap.st,v 1.2 1995-03-18 05:10:02 claus Exp $
"
!
documentation
"
Colormaps are used with images (and Forms) to keep the byte-to-color
mapping.
Internally, the values are stored as 3 separate byte-arrays
(i.e. individual components can be 0..255).
"
! !
!Colormap class methodsFor:'instance creation'!
redVector:r greenVector:g blueVector:b
^ self new redVector:r greenVector:g blueVector:b
"
Colormap
redVector:#[0 127 255]
greenVector:#[0 127 255]
blueVector:#[0 127 255]
"
!
fromColors:aColorArray
|n rV gV bV|
n := aColorArray size.
rV := ByteArray new:n.
gV := ByteArray new:n.
bV := ByteArray new:n.
1 to:n do:[:i |
|clr|
clr := aColorArray at:i.
rV at:i put:(clr red * 255 / 100) rounded.
bV at:i put:(clr green * 255 / 100) rounded.
gV at:i put:(clr blue * 255 / 100) rounded.
].
^ self new redVector:rV greenVector:gV blueVector:bV
"
Colormap
fromColors:(Array with:Color black
with:Color red
with:Color white)
"
! !
!Colormap methodsFor:'accessing'!
size
^ redVector size
!
redVector:r greenVector:g blueVector:b
redVector := r.
greenVector := g.
blueVector := b.
!
redVector
"return redVector"
^ redVector
!
redVector:something
"set redVector"
redVector := something.
!
greenVector
"return greenVector"
^ greenVector
!
greenVector:something
"set greenVector"
greenVector := something.
!
blueVector
"return blueVector"
^ blueVector
!
blueVector:something
"set blueVector"
blueVector := something.
!
at:index
"return the color at index - notice, that index is a typically derived
from an images pixel value which ranges 0..255; while the index here
starts at 1 (to make colormap look more like a collection)."
|r g b|
r := redVector at:index.
g := greenVector at:index.
b := blueVector at:index.
^ Color
red:(r * 100 / 255)
green:(g * 100 / 255)
blue:(b * 100 / 255)
!
at:index put:aColor
"set the color at index - notice, that index is a typically derived
from an images pixel value which ranges 0..255; while the index here
starts at 1 (to make colormap look more like a collection)."
|r g b|
r := (aColor red * 255 / 100) rounded.
g := (aColor green * 255 / 100) rounded.
b := (aColor blue * 255 / 100) rounded.
redVector at:index put:r.
greenVector at:index put:g.
blueVector at:index put:b.
!
colors
"ST-80 compatibility: return a collection containing the colors I hold"
^ self asArray
! !
!Colormap methodsFor:'misc'!
scaleValuesBy:scaleFactor
"multiply all values by scaleFactor; finally round to integer."
1 to:redVector size do:[:index |
redVector at:index put:((redVector at:index) * scaleFactor) rounded.
greenVector at:index put:((redVector at:index) * scaleFactor) rounded.
blueVector at:index put:((redVector at:index) * scaleFactor) rounded.
]
! !