Depth8Image.st
changeset 7322 051a91207011
parent 7276 3af688594d98
child 7323 42cd85aec8ea
--- 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"