Colormap.st
author Claus Gittinger <cg@exept.de>
Sat, 11 Nov 1995 16:54:10 +0100
changeset 219 9ff0660f447f
parent 153 c56277fa4865
child 285 1effedd62f30
permissions -rw-r--r--
uff - version methods changed to return stings

"
 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 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.4 1995-11-11 15:48:49 cg 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.
!

redAt:index
    "return the red component at some index.
     The returned value is scaled from the internal 0.. 255 to
     a percentage value 0..100"

    ^ (redVector at:index) * 100 / 255
!

greenAt:index
    "return the green component at some index.
     The returned value is scaled from the internal 0.. 255 to
     a percentage value 0..100"

    ^ (greenVector at:index) * 100 / 255
!

blueAt:index
    "return the blue component at some index.
     The returned value is scaled from the internal 0.. 255 to
     a percentage value 0..100"

    ^ (blueVector at:index) * 100 / 255
!


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.
    This can be used to brighten/darken an images colormap"

   1 to:redVector size do:[:index |
	redVector at:index put:((redVector at:index) * scaleFactor) rounded.
	greenVector at:index put:((greenVector at:index) * scaleFactor) rounded.
	blueVector at:index put:((blueVector at:index) * scaleFactor) rounded.
   ]
! !