#FEATURE by cg
authorClaus Gittinger <cg@exept.de>
Wed, 07 Sep 2016 17:17:27 +0200
changeset 7549 feafeb92feda
parent 7547 de2dcd42f0bb
child 7550 b38f65fc5d21
#FEATURE by cg class: Depth24Image changed: #valuesFromX:y:toX:y:do: oops - off by one error inindex computation.
Depth24Image.st
--- a/Depth24Image.st	Tue Sep 06 18:07:04 2016 +0200
+++ b/Depth24Image.st	Wed Sep 07 17:17:27 2016 +0200
@@ -2722,59 +2722,59 @@
      && (__BlockInstPtr(aBlock)->b_nargs == __mkSmallInteger(3))
      && ((codeVal = __BlockInstPtr(aBlock)->b_code) != (OBJFUNC)nil)
     ) {
-	int c_x1 = __intVal(x1);
-	int c_x2 = __intVal(x2);
-	int c_y1 = __intVal(y1);
-	int c_y2 = __intVal(y2);
-	int c_w = __intVal(__INST(width));
-	int c_h = __intVal(__INST(height));
-	int c_srcIndex = __intVal(srcIndex);
-	int c_bytesPerRow = __intVal(bytesPerRow);
-	int c_y, c_x;
-	OBJ c_rHome;
-
-	c_rHome = __BlockInstPtr(aBlock)->b_home;
-	if ((c_rHome == nil) || (__qSpace(c_rHome) >= STACKSPACE)) {
-	    if ((((unsigned)c_y1) < c_h)
-	     && (((unsigned)c_y2) < c_h)
-	     && (((unsigned)c_x1) < c_w)
-	     && (((unsigned)c_x2) < c_w)) {
-		unsigned char *c_bytes = (unsigned char*)__ByteArrayInstPtr(bytes)->ba_element;
-
-		if ((c_srcIndex + (c_bytesPerRow * (c_y2-c_y1))) < __byteArraySize(bytes)) {
-		    c_bytes += c_srcIndex;
-		    for (c_y=c_y1; c_y<=c_y2; c_y++) {
-			unsigned char *c_next = c_bytes + c_bytesPerRow;
-
-			for (c_x=c_x1; c_x<=c_x2; c_x++) {
-			    int c_value;
-
-			    c_value = c_bytes[0];
-			    c_value = (c_value<<8) | c_bytes[1];
-			    c_value = (c_value<<8) | c_bytes[2];
-			    (*(__BlockInstPtr(aBlock)->b_code))(c_rHome, __mkSmallInteger(c_x), __mkSmallInteger(c_y), __mkSmallInteger(c_value));
-			    c_bytes += 3;
-			}
-			c_bytes = c_next;
-		    }
-		    RETURN(self);
-		}
-	    }
-	}
+        int c_x1 = __intVal(x1);
+        int c_x2 = __intVal(x2);
+        int c_y1 = __intVal(y1);
+        int c_y2 = __intVal(y2);
+        int c_w = __intVal(__INST(width));
+        int c_h = __intVal(__INST(height));
+        int c_srcIndex = __intVal(srcIndex)-1;
+        int c_bytesPerRow = __intVal(bytesPerRow);
+        int c_y, c_x;
+        OBJ c_rHome;
+
+        c_rHome = __BlockInstPtr(aBlock)->b_home;
+        if ((c_rHome == nil) || (__qSpace(c_rHome) >= STACKSPACE)) {
+            if ((((unsigned)c_y1) < c_h)
+             && (((unsigned)c_y2) < c_h)
+             && (((unsigned)c_x1) < c_w)
+             && (((unsigned)c_x2) < c_w)) {
+                unsigned char *c_bytes = (unsigned char*)__ByteArrayInstPtr(bytes)->ba_element;
+
+                if ((c_srcIndex + (c_bytesPerRow * (c_y2-c_y1))) < __byteArraySize(bytes)) {
+                    c_bytes += c_srcIndex;
+                    for (c_y=c_y1; c_y<=c_y2; c_y++) {
+                        unsigned char *c_next = c_bytes + c_bytesPerRow;
+
+                        for (c_x=c_x1; c_x<=c_x2; c_x++) {
+                            int c_value;
+
+                            c_value = c_bytes[0];
+                            c_value = (c_value<<8) | c_bytes[1];
+                            c_value = (c_value<<8) | c_bytes[2];
+                            (*(__BlockInstPtr(aBlock)->b_code))(c_rHome, __mkSmallInteger(c_x), __mkSmallInteger(c_y), __mkSmallInteger(c_value));
+                            c_bytes += 3;
+                        }
+                        c_bytes = c_next;
+                    }
+                    RETURN(self);
+                }
+            }
+        }
     }
 %}.
 
     y1 to:y2 do:[:y |
-	srcNext := srcIndex + bytesPerRow.
-	x1 to:x2 do:[:x |
-	    value := bytes at:srcIndex.
-	    value := (value bitShift:8) + (bytes at:srcIndex+1).
-	    value := (value bitShift:8) + (bytes at:srcIndex+2).
-	    srcIndex := srcIndex + 3.
-
-	    aBlock value:x value:y value:value
-	].
-	srcIndex := srcNext.
+        srcNext := srcIndex + bytesPerRow.
+        x1 to:x2 do:[:x |
+            value := bytes at:srcIndex.
+            value := (value bitShift:8) + (bytes at:srcIndex+1).
+            value := (value bitShift:8) + (bytes at:srcIndex+2).
+            srcIndex := srcIndex + 3.
+
+            aBlock value:x value:y value:value
+        ].
+        srcIndex := srcNext.
     ].
 
     "Modified: 11.7.1996 / 20:06:47 / cg"
@@ -3418,3 +3418,4 @@
 version_CVS
     ^ '$Header$'
 ! !
+