diff -r 9c057f59fedc -r 051a91207011 Depth8Image.st --- 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"