This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[gui] [PATCH] ReplicateScaleFilter and CropImageFilterimplementations for byte pixels
- From: David Jee <djee at redhat dot com>
- To: java-patches at gcc dot gnu dot org
- Date: Thu, 06 May 2004 13:13:09 -0400
- Subject: [gui] [PATCH] ReplicateScaleFilter and CropImageFilterimplementations for byte pixels
Hello,
I'm committing the following patch to the java-gui-branch. It implements
the setPixels() method for byte pixels in ReplicateScaleFilter and
CropImageFilter.
-David Jee
2004-05-06 David Jee <djee@redhat.com>
* java/awt/image/CropImageFilter.java
(setPixels): Implement for byte array pixels.
* java/awt/image/ReplicateScaleFilter.java
(setPixels): Implement for byte array pixels.
(replicatePixels): Overload for byte array pixels.
Index: java/awt/image/CropImageFilter.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/image/CropImageFilter.java,v
retrieving revision 1.1.84.1
diff -u -r1.1.84.1 CropImageFilter.java
--- java/awt/image/CropImageFilter.java 5 May 2004 20:57:14 -0000 1.1.84.1
+++ java/awt/image/CropImageFilter.java 6 May 2004 16:49:38 -0000
@@ -114,7 +114,27 @@
public void setPixels(int x, int y, int w, int h,
ColorModel model, byte[] pixels, int offset, int scansize)
{
- consumer.setPixels(x, y, w, h, model, pixels, offset, scansize);
+ Rectangle filterBounds = new Rectangle(this.x, this.y,
+ this.width, this.height);
+ Rectangle pixelBounds = new Rectangle(x, y, w, h);
+
+ if (filterBounds.intersects(pixelBounds))
+ {
+ Rectangle bounds = filterBounds.intersection(pixelBounds);
+
+ byte[] cropped = new byte[bounds.width * bounds.height];
+ for (int i = 0; i < bounds.height; i++)
+ {
+ int start = (bounds.y - pixelBounds.y + i) * scansize + offset;
+
+ for (int j = 0; j < bounds.width; j++)
+ cropped[i * bounds.width + j] = pixels[start + bounds.x + j];
+ }
+
+ consumer.setPixels(bounds.x, bounds.y,
+ bounds.width, bounds.height,
+ model, cropped, 0, bounds.width);
+ }
}
/**
Index: java/awt/image/ReplicateScaleFilter.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/image/ReplicateScaleFilter.java,v
retrieving revision 1.1.84.1
diff -u -r1.1.84.1 ReplicateScaleFilter.java
--- java/awt/image/ReplicateScaleFilter.java 5 May 2004 20:57:14 -0000 1.1.84.1
+++ java/awt/image/ReplicateScaleFilter.java 6 May 2004 16:49:38 -0000
@@ -156,7 +156,18 @@
public void setPixels(int x, int y, int w, int h,
ColorModel model, byte[] pixels, int offset, int scansize)
{
- consumer.setPixels(x, y, w, h, model, pixels, offset, scansize);
+ double rx = ((double) srcWidth) / destWidth;
+ double ry = ((double) srcHeight) / destHeight;
+
+ int destScansize = (int) Math.round(scansize / rx);
+
+ byte[] destPixels = replicatePixels(x, y, w, h,
+ model, pixels, offset, scansize,
+ rx, ry, destScansize);
+
+ consumer.setPixels((int) Math.floor(x/rx), (int) Math.floor(y/ry),
+ (int) Math.ceil(w/rx), (int) Math.ceil(h/ry),
+ model, destPixels, 0, destScansize);
}
/**
@@ -188,6 +199,26 @@
consumer.setPixels((int) Math.floor(x/rx), (int) Math.floor(y/ry),
(int) Math.ceil(w/rx), (int) Math.ceil(h/ry),
model, destPixels, 0, destScansize);
+ }
+
+ protected byte[] replicatePixels(int srcx, int srcy, int srcw, int srch,
+ ColorModel model, byte[] srcPixels,
+ int srcOffset, int srcScansize,
+ double rx, double ry, int destScansize)
+ {
+ byte[] destPixels =
+ new byte[(int) Math.ceil(srcw/rx) * (int) Math.ceil(srch/ry)];
+
+ int a, b;
+ for (int i = 0; i < destPixels.length; i++)
+ {
+ a = (int) ((int) ( ((double) i) / destScansize) * ry) * srcScansize;
+ b = (int) ((i % destScansize) * rx);
+ if ((a + b + srcOffset) < srcPixels.length)
+ destPixels[i] = srcPixels[a + b + srcOffset];
+ }
+
+ return destPixels;
}
protected int[] replicatePixels(int srcx, int srcy, int srcw, int srch,