--- a/Depth8Image.st Fri Apr 29 12:29:54 2016 +0200
+++ b/Depth8Image.st Fri Apr 29 12:30:03 2016 +0200
@@ -1847,26 +1847,31 @@
value "{ Class: SmallInteger }"
x1 "{ Class: SmallInteger }"
x2 "{ Class: SmallInteger }"
- color colorArray bytes|
+ color cachedColorArray pixelBytes lastValue lastColor|
- bytes := self bits.
+ pixelBytes := self bits.
x1 := xLow.
x2 := xHigh.
srcIndex := (width * y) + 1 + x1.
- colorArray := Array new:256.
+ cachedColorArray := Array new:256.
x1 to:x2 do:[:x |
- value := bytes at:srcIndex.
- srcIndex := srcIndex + 1.
-
- color := colorArray at:value+1.
- color isNil ifTrue:[
- color := self colorFromValue:value.
- colorArray at:value+1 put:color
- ].
- aBlock value:x value:color
+ value := pixelBytes at:srcIndex.
+ srcIndex := srcIndex + 1.
+
+ value == lastValue ifTrue:[
+ color := lastColor
+ ] ifFalse:[
+ color := cachedColorArray at:value+1.
+ color isNil ifTrue:[
+ color := self colorFromValue:value.
+ cachedColorArray at:value+1 put:color
+ ].
+ lastValue := value. lastColor := color.
+ ].
+ aBlock value:x value:color
]
"Created: 7.6.1996 / 19:12:35 / cg"