Hi, commited David's patch after review:

2005-06-08  David Gilbert  <[EMAIL PROTECTED]>

        * java/awt/image/BandedSampleModel.java
        (createBankArray): New method.
        (BandedSampleModel(int, int, int, int)): reimplemented.
        (BandedSampleModel(int, int, int, int, int[], int[]): 
        RasterFormatException nearer to start of constructor.
        (getPixel): Use band index, not zero.
        (getPixels): Fixed loop indices.
        (getSamples): Fixed loop indices.
        (setDataElements): Use band index, not zero.


Index: java/awt/image/BandedSampleModel.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/awt/image/BandedSampleModel.java,v
retrieving revision 1.3
diff -u -r1.3 BandedSampleModel.java
--- java/awt/image/BandedSampleModel.java	16 Feb 2005 10:39:27 -0000	1.3
+++ java/awt/image/BandedSampleModel.java	7 Jun 2005 21:32:45 -0000
@@ -1,4 +1,4 @@
-/* Copyright (C) 2004  Free Software Foundation
+/* Copyright (C) 2004, 2005, Free Software Foundation
 
 This file is part of GNU Classpath.
 
@@ -53,9 +53,17 @@
   private int numberOfBits;
   private int numElems;
 
+  private static int[] createBankArray(int size) 
+  {
+    int[] result = new int[size];
+    for (int i = 0; i < size; i++)
+      result[i] = i;
+    return result;
+  }
+
   public BandedSampleModel(int dataType, int w, int h, int numBands)
   {
-    super(dataType, w, h, 1, w, new int[numBands]);
+    this(dataType, w, h, w, createBankArray(numBands), new int[numBands]);
   }
 
   public BandedSampleModel(int dataType, int w, int h, int scanlineStride,
@@ -103,6 +111,10 @@
 
   public SampleModel createSubsetSampleModel(int[] bands)
   {
+    if (bands.length > bankIndices.length)
+      throw new
+	RasterFormatException("BandedSampleModel createSubsetSampleModel too"
+			      +" many bands");
     int[] newoff = new int[bands.length];
     int[] newbanks = new int[bands.length];
     for (int i=0; i < bands.length; i++)
@@ -112,11 +124,6 @@
 	newbanks[i] = bankIndices[b];
       }
 
-    if (bands.length > bankIndices.length)
-      throw new
-	RasterFormatException("BandedSampleModel createSubsetSampleModel too"
-			      +" many bands");
-    
     return new BandedSampleModel(dataType, width, height, scanlineStride,
 				 newbanks, newoff);
   }
@@ -192,7 +199,7 @@
   {
     if (iArray == null) iArray = new int[numBands];
     for (int i=0; i < numBands; i++)
-      iArray[i] = getSample(x, y, 0, data);
+      iArray[i] = getSample(x, y, i, data);
 	
     return iArray;
   }
@@ -223,13 +230,15 @@
   {
     if (iArray == null) iArray = new int[w*h*numBands];
     int outOffset = 0;
-    for (y=0; y<h; y++)
+    int maxX = x + w;
+    int maxY = y + h;
+    for (int yy = x; yy < maxY; yy++)
       {
-	for (x=0; x<w;)
+	for (int xx = x; xx < maxX; xx++)
 	  {
-	    for (int b=0; b < numBands; b++)
+	    for (int b = 0; b < numBands; b++)
 	      {
-		int offset = bandOffsets[b] + y * scanlineStride + x;
+		int offset = bandOffsets[b] + yy * scanlineStride + xx;
 		iArray[outOffset++] =
 		  data.getElem(bankIndices[b], offset);
 	      }
@@ -281,11 +290,13 @@
   {
     if (iArray == null) iArray = new int[w*h];
     int outOffset = 0;
-    for (y=0; y<h; y++)
+    int maxX = x + w;
+    int maxY = y + h;
+    for (int yy = y; yy < maxY; yy++)
       {
-	for (x=0; x<w;)
+	for (int xx = x; xx < maxX; xx++)
 	  {
-	    int offset = bandOffsets[b] + y * scanlineStride + x;
+	    int offset = bandOffsets[b] + yy * scanlineStride + xx;
 	    iArray[outOffset++] =
 	      data.getElem(bankIndices[b], offset);
 	  }
@@ -328,7 +339,7 @@
 	      DataBufferByte out = (DataBufferByte) data;
 	      byte[] in = (byte[]) obj;
 	      for (int i=0; i < numBands; i++)
-		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[0];
+		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
 	      return;
 	    }
 	  case DataBuffer.TYPE_SHORT:
@@ -336,7 +347,7 @@
 	      DataBufferShort out = (DataBufferShort) data;
 	      short[] in = (short[]) obj;
 	      for (int i=0; i < numBands; i++)
-		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[0];
+		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
 	      return;
 	    }
 	  case DataBuffer.TYPE_USHORT:
@@ -344,7 +355,7 @@
 	      DataBufferUShort out = (DataBufferUShort) data;
 	      short[] in = (short[]) obj;
 	      for (int i=0; i < numBands; i++)
-		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[0];
+		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
 	      return;
 	    }
 	  case DataBuffer.TYPE_INT:
@@ -352,7 +363,7 @@
 	      DataBufferInt out = (DataBufferInt) data;
 	      int[] in = (int[]) obj;
 	      for (int i=0; i < numBands; i++)
-		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[0];
+		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
 	      return;
 	    }
 	  case DataBuffer.TYPE_FLOAT:
@@ -360,7 +371,7 @@
 	      DataBufferFloat out = (DataBufferFloat) data;
 	      float[] in = (float[]) obj;
 	      for (int i=0; i < numBands; i++)
-		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[0];
+		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
 	      return;
 	    }
 	  case DataBuffer.TYPE_DOUBLE:
@@ -368,7 +379,7 @@
 	      DataBufferDouble out = (DataBufferDouble) data;
 	      double[] in = (double[]) obj;
 	      for (int i=0; i < numBands; i++)
-		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[0];
+		out.getData(bankIndices[i])[offset + bandOffsets[i]] = in[i];
 	      return;
 	    }
 	  default:
_______________________________________________
Classpath-patches mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/classpath-patches

Reply via email to