--- a/ImageEditView.st Fri Jun 20 16:25:06 2003 +0200
+++ b/ImageEditView.st Sat Jun 21 12:00:37 2003 +0200
@@ -1323,14 +1323,16 @@
!
reduceColorResolutionBy:numBits
- |xMax yMax r g b n_r n_g n_b clr pix map revMap n_clr n_pix mask anyChange
- newColors newColorArray newImage|
+ |xMax yMax r g b nR nG nB clr pix map revMap n_clr n_pix mask anyChange
+ newColors newColorArray newImage extMask extBits newPixelValue|
numBits > 7 ifTrue:[
self warn:'Max. number of bits to strip off is 7.'.
^ false
].
mask := (16rFF bitShift:numBits) bitAnd:16rFF.
+ extMask := (1 bitShift:numBits).
+ extBits := extMask - 1.
anyChange := false.
@@ -1348,18 +1350,26 @@
xMax := image width - 1.
yMax := image height - 1.
+ newPixelValue :=
+ [:image :pixelValue |
+ |r g b nR nG nB|
+
+ r := image redBitsOf:pixelValue.
+ g := image greenBitsOf:pixelValue.
+ b := image blueBitsOf:pixelValue.
+ nR := r bitAnd:mask. (nR bitAnd:extMask)~~0 ifTrue:[nR := nR bitOr:extBits].
+ nG := g bitAnd:mask. (nG bitAnd:extMask)~~0 ifTrue:[nG := nG bitOr:extBits].
+ nB := b bitAnd:mask. (nB bitAnd:extMask)~~0 ifTrue:[nB := nB bitOr:extBits].
+ image valueFromRedBits:nR greenBits:nG blueBits:nB.
+ ].
+
+
image photometric == #palette ifFalse:[
"/ direct manipulation of the pixels
0 to:yMax do:[:y |
0 to:xMax do:[:x |
pix := image pixelAtX:x y:y.
- r := image redBitsOf:pix.
- g := image greenBitsOf:pix.
- b := image blueBitsOf:pix.
- n_r := r bitAnd:mask.
- n_g := g bitAnd:mask.
- n_b := b bitAnd:mask.
- n_pix := image valueFromRedBits:n_r greenBits:n_g blueBits:n_b.
+ n_pix := newPixelValue value:image value:pix.
n_pix ~= pix ifTrue:[
newImage pixelAtX:x y:y put:n_pix.
anyChange := true.
@@ -1376,13 +1386,14 @@
pix := image pixelAtX:x y:y.
(n_pix := map at:pix+1) isNil ifTrue:[
clr := image colorAtX:x y:y.
+
r := clr redByte.
g := clr greenByte.
b := clr blueByte.
- n_r := r bitAnd:mask.
- n_g := g bitAnd:mask.
- n_b := b bitAnd:mask.
- n_clr := Color redByte:n_r greenByte:n_g blueByte:n_b.
+ nR := r bitAnd:mask. (nR bitAnd:extMask)~~0 ifTrue:[nR := nR bitOr:extBits].
+ nG := g bitAnd:mask. (nR bitAnd:extMask)~~0 ifTrue:[nR := nR bitOr:extBits].
+ nB := b bitAnd:mask. (nR bitAnd:extMask)~~0 ifTrue:[nR := nR bitOr:extBits].
+ n_clr := Color redByte:nR greenByte:nG blueByte:nB.
(newColors includes:n_clr) ifFalse:[
newColors add:n_clr.
newColorArray add:n_clr.
@@ -2322,7 +2333,7 @@
!ImageEditView class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libwidg2/ImageEditView.st,v 1.182 2003-05-19 09:03:37 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libwidg2/ImageEditView.st,v 1.183 2003-06-21 10:00:37 cg Exp $'
! !
ImageEditView initialize!