[gui] [PATCH] Fix RGBImageFilter
David Jee
djee@redhat.com
Wed May 12 23:42:00 GMT 2004
Hi,
I committed the following patch to the java-gui-branch. It fixes a few things in java.awt.image.RGBImageFilter class.
-David Jee
2004-05-12 David Jee <djee@redhat.com>
* java/awt/image/RGBImageFilter.java:
Initialize origmodel as null.
(makeColor): Fix pixel component order.
(filterRGBPixels): Fix pixel iteration.
(setPixels): Add extra checks for index color model. Convert pixels
to default color model if necessary.
(convertColorModelToDefault): New override method for byte pixels.
(convertColorModelToDefault): For int pixels, fix pixel iteration.
(makeColorbyDefaultCM): New override method for byte pixels.
(makeColorbyDefaultCM): For int pixel, add color model as argument.
(makeColor): Fix pixel component order.
-------------- next part --------------
Index: java/awt/image/RGBImageFilter.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/image/RGBImageFilter.java,v
retrieving revision 1.2
diff -u -r1.2 RGBImageFilter.java
--- java/awt/image/RGBImageFilter.java 11 Oct 2003 17:19:46 -0000 1.2
+++ java/awt/image/RGBImageFilter.java 12 May 2004 17:43:41 -0000
@@ -46,7 +46,7 @@
*/
public abstract class RGBImageFilter extends ImageFilter
{
- protected ColorModel origmodel = ColorModel.getRGBdefault();
+ protected ColorModel origmodel;
protected ColorModel newmodel;
@@ -126,7 +126,7 @@
private int makeColor( byte a, byte r, byte g, byte b )
{
- return ( 0xff000000 & (a << 24) | 0xff0000 & (r << 16) | 0xff00 & (b << 8) | 0xff & g );
+ return ( 0xff000000 & (a << 24) | 0xff0000 & (r << 16) | 0xff00 & (g << 8) | 0xff & b );
}
/**
@@ -149,11 +149,15 @@
int off,
int scansize)
{
- int xp, yp;
+ int xp, yp, i;
+ i = 0;
for( xp = x; xp < ( x + w); xp++ )
for( yp = y; yp < (y + h); yp++ )
- pixels[ off + yp * scansize + xp ] = filterRGB( xp, yp, pixels[ off + yp * scansize + xp ] );
+ {
+ pixels[i] = filterRGB( xp, yp, pixels[i] );
+ i++;
+ }
}
@@ -172,15 +176,19 @@
* @param scansize the width to use in extracting pixels from the <code>pixels</code> array
*/
public void setPixels(int x, int y, int w, int h,
- ColorModel model, byte[] pixels, int offset, int scansize)
+ ColorModel model, byte[] pixels,
+ int offset, int scansize)
{
- if( model == origmodel ) {
+ if(model == origmodel && (model instanceof IndexColorModel) && canFilterIndexColorModel)
+ {
consumer.setPixels(x, y, w, h, newmodel, pixels, offset, scansize);
- } else {
- //FIXME
- //convert to proper CM
- int pixelsi[] = new int[ pixels.length / 4 ];
- filterRGBPixels( x, y, w, h, pixelsi, offset, scansize );
+ }
+ else
+ {
+ int intPixels[] =
+ convertColorModelToDefault( x, y, w, h, model, pixels, offset, scansize );
+ filterRGBPixels( x, y, w, h, intPixels, offset, scansize );
+ consumer.setPixels(x, y, w, h, ColorModel.getRGBdefault(), intPixels, offset, scansize);
}
}
@@ -199,35 +207,53 @@
* @param scansize the width to use in extracting pixels from the <code>pixels</code> array
*/
public void setPixels(int x, int y, int w, int h,
- ColorModel model, int[] pixels, int offset, int scansize)
+ ColorModel model, int[] pixels,
+ int offset, int scansize)
{
- if( model == origmodel ) {
+ if(model == origmodel && (model instanceof IndexColorModel) && canFilterIndexColorModel)
+ {
consumer.setPixels(x, y, w, h, newmodel, pixels, offset, scansize);
- } else {
+ }
+ else
+ {
+ //FIXME: Store the filtered pixels in a separate temporary buffer?
convertColorModelToDefault( x, y, w, h, model, pixels, offset, scansize );
filterRGBPixels( x, y, w, h, pixels, offset, scansize );
+ consumer.setPixels(x, y, w, h, ColorModel.getRGBdefault(), pixels, offset, scansize);
}
}
- private void convertColorModelToDefault( int x, int y, int w, int h,
- ColorModel model, int pixels[], int offset, int scansize)
- {
- int xp, yp;
+ private int[] convertColorModelToDefault(int x, int y, int w, int h,
+ ColorModel model, byte pixels[],
+ int offset, int scansize)
+ {
+ int intPixels[] = new int[pixels.length];
+ for (int i = 0; i < pixels.length; i++)
+ intPixels[i] = makeColorbyDefaultCM(model, pixels[i]);
+ return intPixels;
+ }
- for( xp = x; xp < ( x + w); xp++ )
- for( yp = y; yp < (y + h); yp++ )
- pixels[ offset + yp * scansize + xp ] = makeColorbyDefaultCM( pixels[ offset + yp * scansize + xp ] );
-
- }
- private int makeColorbyDefaultCM( int rgb )
- {
- return makeColor( origmodel.getRed( rgb ), origmodel.getGreen( rgb ), origmodel.getGreen( rgb ), origmodel.getBlue( rgb ) );
- }
+ private void convertColorModelToDefault(int x, int y, int w, int h,
+ ColorModel model, int pixels[],
+ int offset, int scansize)
+ {
+ for (int i = 0; i < pixels.length; i++)
+ pixels[i] = makeColorbyDefaultCM(model, pixels[i]);
+ }
+ private int makeColorbyDefaultCM(ColorModel model, byte rgb)
+ {
+ return makeColor( model.getAlpha( rgb ) * 4, model.getRed( rgb ) * 4, model.getGreen( rgb ) * 4, model.getBlue( rgb ) * 4 );
+ }
+
+ private int makeColorbyDefaultCM(ColorModel model, int rgb)
+ {
+ return makeColor( model.getAlpha( rgb ), model.getRed( rgb ), model.getGreen( rgb ), model.getBlue( rgb ) );
+ }
private int makeColor( int a, int r, int g, int b )
{
- return (int)( 0xff000000 & (a << 24) | 0xff0000 & (r << 16) | 0xff00 & (b << 8) | 0xff & g );
+ return (int)( 0xff000000 & (a << 24) | 0xff0000 & (r << 16) | 0xff00 & (g << 8) | 0xff & b );
}
More information about the Java-patches
mailing list