Makefile.in: Rebuilt.
* Makefile.in: Rebuilt. * Makefile.am (awt_java_source_files): Added new files. * java/awt/image/AreaAveragingScaleFilter.java: New file from Classpath. * java/awt/image/CropImageFilter.java: New file from Classpath. * java/awt/image/FilteredImageSource.java: New file from Classpath. * java/awt/image/ImageFilter.java: New file from Classpath. * java/awt/image/MemoryImageSource.java: New file from Classpath. * java/awt/image/PixelGrabber.java: New file from Classpath. * java/awt/image/RGBImageFilter.java: New file from Classpath. * java/awt/image/ReplicateScaleFilter.java: New file from Classpath. * java/awt/image/ImageProducer.java: Replaced with Classpath version. * java/awt/image/ImageObserver.java: Replaced with Classpath version. * java/awt/image/ImageConsumer.java: Replaced with Classpath version. * java/awt/GridBagConstraints.java (clone): Catch CloneNotSupportedException. From-SVN: r49157
This commit is contained in:
parent
aac0eb5d46
commit
152d4916ef
12 changed files with 1774 additions and 7 deletions
361
libjava/java/awt/image/PixelGrabber.java
Normal file
361
libjava/java/awt/image/PixelGrabber.java
Normal file
|
@ -0,0 +1,361 @@
|
|||
/* PixelGrabber.java -- Java class for providing image data
|
||||
Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
|
||||
package java.awt.image;
|
||||
|
||||
import java.awt.Image;
|
||||
import java.util.Hashtable;
|
||||
|
||||
/**
|
||||
PixelGrabber is an ImageConsumer designed to extract a rectangular region of pixels
|
||||
from an Image
|
||||
*/
|
||||
public class PixelGrabber implements ImageConsumer
|
||||
{
|
||||
int x, y, width, height, status, scansize, offset;
|
||||
ColorModel model = ColorModel.getRGBdefault();
|
||||
//int hints;
|
||||
//Hashtable props;
|
||||
int pixel_bufferi[];
|
||||
byte pixel_bufferb[];
|
||||
boolean grabbing;
|
||||
ImageProducer ip;
|
||||
|
||||
/**
|
||||
* Create a PixelGrabber used to grab pixels from the specified Image
|
||||
* in the specified rectangle
|
||||
*
|
||||
* @param img the Image to grab pixels from
|
||||
* @param x the x coordinate of the rectangle
|
||||
* @param y the y coordinate of the rectangle
|
||||
* @param w the width of the rectangle
|
||||
* @param h the height of the rectangle
|
||||
* @param pixels the array of pixel values
|
||||
* @param offset the index of the first pixels in the <code>pixels</code> array
|
||||
* @param scansize the width to use in extracting pixels from the <code>pixels</code> array
|
||||
*/
|
||||
public PixelGrabber(Image img, int x, int y, int w, int h,
|
||||
int pix[], int off, int scansize)
|
||||
{
|
||||
this( img.getSource(), x, y, w, h, pix, off, scansize );
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a PixelGrabber used to grab pixels from the specified ImageProducer
|
||||
* in the specified rectangle
|
||||
*
|
||||
* @param ip the ImageProducer to grab pixels from
|
||||
* @param x the x coordinate of the rectangle
|
||||
* @param y the y coordinate of the rectangle
|
||||
* @param w the width of the rectangle
|
||||
* @param h the height of the rectangle
|
||||
* @param pixels the array of pixel values
|
||||
* @param offset the index of the first pixels in the <code>pixels</code> array
|
||||
* @param scansize the width to use in extracting pixels from the <code>pixels</code> array
|
||||
*/
|
||||
public PixelGrabber(ImageProducer ip, int x, int y, int w, int h,
|
||||
int pix[], int off, int scansize)
|
||||
{
|
||||
this.ip = ip;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.width = w;
|
||||
this.height = h;
|
||||
this.pixel_bufferi = pix;
|
||||
this.offset = off;
|
||||
this.scansize = scansize;
|
||||
pixel_bufferb = new byte[pix.length * 4];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create a PixelGrabber used to grab pixels from the specified Image
|
||||
* in the specified rectangle
|
||||
*
|
||||
* @param img the Image to grab pixels from
|
||||
* @param x the x coordinate of the rectangle
|
||||
* @param y the y coordinate of the rectangle
|
||||
* @param w the width of the rectangle
|
||||
* @param h the height of the rectangle
|
||||
* @param forceRGB true to force conversion to RGB
|
||||
*/
|
||||
public PixelGrabber(Image img,
|
||||
int x, int y,
|
||||
int w, int h,
|
||||
boolean forceRGB)
|
||||
{
|
||||
//FIXME
|
||||
}
|
||||
|
||||
/**
|
||||
Start Grabbing Pixels
|
||||
*/
|
||||
public synchronized void startGrabbing()
|
||||
{
|
||||
if ( grabbing == false )
|
||||
{
|
||||
grabbing = true;
|
||||
ip.startProduction( this );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Abort the grabbing of pixels
|
||||
*/
|
||||
public synchronized void abortGrabbing()
|
||||
{
|
||||
if ( grabbing == true )
|
||||
{
|
||||
grabbing = false;
|
||||
ip.removeConsumer( this );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Grab the Pixels.
|
||||
|
||||
@return true if successful
|
||||
|
||||
@throws InterruptedExcpetion if interrupted by another thread.
|
||||
*/
|
||||
public boolean grabPixels() throws InterruptedException
|
||||
{
|
||||
startGrabbing();
|
||||
while ( (status != ImageObserver.ALLBITS ) ||
|
||||
(status != ImageObserver.ERROR ) ||
|
||||
(status != ImageObserver.ABORT ) );
|
||||
|
||||
if( status == ImageObserver.ALLBITS )
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
Grab the Pixels and abort if it takes too long
|
||||
|
||||
@return true if successful
|
||||
|
||||
@throws InterruptedExcpetion if interrupted by another thread.
|
||||
or time runs out
|
||||
*/
|
||||
public synchronized boolean grabPixels(long ms) throws InterruptedException
|
||||
{
|
||||
long start = System.currentTimeMillis();
|
||||
startGrabbing();
|
||||
while ( (status != ImageObserver.ALLBITS ) ||
|
||||
(status != ImageObserver.ERROR ) ||
|
||||
(status != ImageObserver.ABORT ) )
|
||||
{
|
||||
if( (System.currentTimeMillis() - start ) >= ms )
|
||||
{
|
||||
abortGrabbing();
|
||||
throw new InterruptedException();
|
||||
}
|
||||
}
|
||||
|
||||
if( status == ImageObserver.ALLBITS )
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
Get the status of the pixel grabbing representing by ImageObserver flags
|
||||
|
||||
@return the status
|
||||
*/
|
||||
public synchronized int getStatus()
|
||||
{
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
Return width of pixel region
|
||||
|
||||
@return width of region
|
||||
*/
|
||||
public synchronized int getWidth()
|
||||
{
|
||||
return width;
|
||||
}
|
||||
|
||||
/**
|
||||
Return height of pixel region
|
||||
|
||||
@return height of region
|
||||
*/
|
||||
public synchronized int getHeight()
|
||||
{
|
||||
return height;
|
||||
}
|
||||
|
||||
/**
|
||||
Returns the grabbed pixel buffer
|
||||
|
||||
@return a byte or int array
|
||||
*/
|
||||
public synchronized Object getPixels()
|
||||
{
|
||||
if( pixel_bufferi != null )
|
||||
return pixel_bufferi;
|
||||
return pixel_bufferb;
|
||||
}
|
||||
|
||||
/**
|
||||
Get the ColorModel of the image
|
||||
|
||||
@return the ColorModel
|
||||
*/
|
||||
public synchronized ColorModel getColorModel()
|
||||
{
|
||||
return model;
|
||||
}
|
||||
|
||||
/**
|
||||
* An <code>ImageProducer</code> indicates the size of the image
|
||||
* being produced using this method.
|
||||
*
|
||||
* @param width the width of the image
|
||||
* @param height the height of the image
|
||||
*/
|
||||
public void setDimensions(int width, int height)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* An <code>ImageProducer</code> can set a list of properties
|
||||
* associated with this image by using this method.
|
||||
*
|
||||
* @param props the list of properties associated with this image
|
||||
*/
|
||||
public void setProperties(Hashtable props)
|
||||
{
|
||||
//this.props = props; //FIXME - DO WE NEED THIS
|
||||
}
|
||||
|
||||
/**
|
||||
* This <code>ColorModel</code> should indicate the model used by
|
||||
* the majority of calls to <code>setPixels</code>. Each call to
|
||||
* <code>setPixels</code> could however indicate a different
|
||||
* <code>ColorModel</code>.
|
||||
*
|
||||
* @param model the color model to be used most often by setPixels
|
||||
* @see ColorModel
|
||||
*/
|
||||
public void setColorModel(ColorModel model)
|
||||
{
|
||||
this.model = model;
|
||||
}
|
||||
|
||||
/**
|
||||
* The <code>ImageProducer</code> should call this method with a
|
||||
* bit mask of hints from any of <code>RANDOMPIXELORDER</code>,
|
||||
* <code>TOPDOWNLEFTRIGHT</code>, <code>COMPLETESCANLINES</code>,
|
||||
* <code>SINGLEPASS</code>, <code>SINGLEFRAME</code>.
|
||||
*
|
||||
* @param flags a bit mask of hints
|
||||
*/
|
||||
public void setHints(int flags)
|
||||
{
|
||||
//hints = flags; // FIXME - DO NOT KNOW WHAT TO DO WITH THE HINTS
|
||||
}
|
||||
|
||||
/**
|
||||
* This function delivers a rectangle of pixels where any
|
||||
* pixel(m,n) is stored in the array as a <code>byte</code> at
|
||||
* index (n * scansize + m + offset).
|
||||
*/
|
||||
public void setPixels(int x, int y, int w, int h,
|
||||
ColorModel model, byte[] pixels, int offset, int scansize)
|
||||
{
|
||||
//FIXME - I hate bytes
|
||||
int xp, yp;
|
||||
for( xp = x; xp < ( x + w); xp++ )
|
||||
for( yp = y; yp < (y + h); yp++ )
|
||||
if( xp >= this.x &&
|
||||
yp >= this.y &&
|
||||
xp <= ( this.x + this.width ) &&
|
||||
yp <= ( this.y + this.height ) ) {
|
||||
pixel_bufferb[(yp - this.y) * this.scansize + (xp - this.x) + this.offset] =
|
||||
pixels[ offset + yp * scansize + xp ];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This function delivers a rectangle of pixels where any
|
||||
* pixel(m,n) is stored in the array as an <code>int</code> at
|
||||
* index (n * scansize + m + offset).
|
||||
*/
|
||||
public void setPixels(int x, int y, int w, int h,
|
||||
ColorModel model, int[] pixels, int offset, int scansize)
|
||||
{
|
||||
int xp, yp;
|
||||
for( xp = x; xp < ( x + w); xp++ )
|
||||
for( yp = y; yp < (y + h); yp++ )
|
||||
if( xp >= this.x &&
|
||||
yp >= this.y &&
|
||||
xp <= ( this.x + this.width ) &&
|
||||
yp <= ( this.y + this.height ) ) {
|
||||
pixel_bufferi[(yp - this.y) * this.scansize + (xp - this.x) + this.offset] =
|
||||
pixels[ offset + yp * scansize + xp ];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The <code>ImageProducer</code> calls this method to indicate a
|
||||
* single frame or the entire image is complete. The method is
|
||||
* also used to indicate an error in loading or producing the
|
||||
* image.
|
||||
*/
|
||||
public synchronized void imageComplete(int status)
|
||||
{
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
/**
|
||||
@deprecated by getStatus
|
||||
*/
|
||||
public synchronized int status()
|
||||
{
|
||||
return getStatus();
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue