mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			419 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			419 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Java
		
	
	
	
/* Copyright (C) 2000  Free Software Foundation
 | 
						|
 | 
						|
   This file is part of libgcj.
 | 
						|
 | 
						|
This software is copyrighted work licensed under the terms of the
 | 
						|
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
 | 
						|
details.  */
 | 
						|
 | 
						|
package java.awt.image;
 | 
						|
 | 
						|
import java.awt.*;
 | 
						|
 | 
						|
/**
 | 
						|
 * @author Rolf W. Rasmussen <rolfwr@ii.uib.no>
 | 
						|
 */
 | 
						|
public class Raster
 | 
						|
{
 | 
						|
  protected SampleModel sampleModel;
 | 
						|
  protected DataBuffer dataBuffer;
 | 
						|
  protected int minX;
 | 
						|
  protected int minY;
 | 
						|
  protected int width;
 | 
						|
  protected int height;
 | 
						|
  protected int sampleModelTranslateX;
 | 
						|
  protected int sampleModelTranslateY;
 | 
						|
  protected int numBands;
 | 
						|
  protected int numDataElements;
 | 
						|
  protected Raster parent;
 | 
						|
  
 | 
						|
  protected Raster(SampleModel sampleModel, Point origin)
 | 
						|
  {
 | 
						|
    this(sampleModel, sampleModel.createDataBuffer(), origin);
 | 
						|
  }
 | 
						|
  
 | 
						|
  protected Raster(SampleModel sampleModel, DataBuffer dataBuffer,
 | 
						|
		   Point origin)
 | 
						|
  {
 | 
						|
    this(sampleModel, dataBuffer,
 | 
						|
	 new Rectangle(origin.x, origin.y,
 | 
						|
		       sampleModel.getWidth(), sampleModel.getHeight()),
 | 
						|
	 origin, null);
 | 
						|
  }
 | 
						|
 | 
						|
  protected Raster(SampleModel sampleModel, DataBuffer dataBuffer,
 | 
						|
		   Rectangle aRegion,
 | 
						|
		   Point sampleModelTranslate, Raster parent)
 | 
						|
  {
 | 
						|
    this.sampleModel = sampleModel;
 | 
						|
    this.dataBuffer = dataBuffer;
 | 
						|
    this.minX = aRegion.x;
 | 
						|
    this.minY = aRegion.y;
 | 
						|
    this.width = aRegion.width;
 | 
						|
    this.height = aRegion.height;
 | 
						|
    this.sampleModelTranslateX = sampleModelTranslate.x;
 | 
						|
    this.sampleModelTranslateY = sampleModelTranslate.y;
 | 
						|
    this.numBands = sampleModel.getNumBands();
 | 
						|
    this.numDataElements = sampleModel.getNumDataElements();
 | 
						|
    this.parent = parent;
 | 
						|
  }
 | 
						|
    
 | 
						|
  public static WritableRaster createInterleavedRaster(int dataType,
 | 
						|
						       int w, int h,
 | 
						|
						       int bands, 
 | 
						|
						       Point location)
 | 
						|
  {
 | 
						|
    int[] bandOffsets = new int[bands];
 | 
						|
    // TODO: Maybe not generate this every time.
 | 
						|
    for (int b=0; b<bands; b++) bandOffsets[b] = b;
 | 
						|
    
 | 
						|
    int scanlineStride = bands*w;
 | 
						|
    return createInterleavedRaster(dataType, w, h, scanlineStride, bands,
 | 
						|
				   bandOffsets, location);
 | 
						|
  }
 | 
						|
 | 
						|
  public static WritableRaster createInterleavedRaster(int dataType,
 | 
						|
						       int w, int h,
 | 
						|
						       int scanlineStride,
 | 
						|
						       int pixelStride,
 | 
						|
						       int[] bandOffsets,
 | 
						|
						       Point location)
 | 
						|
  {
 | 
						|
    SampleModel sm = new ComponentSampleModel(dataType,
 | 
						|
					      w, h,
 | 
						|
					      pixelStride,
 | 
						|
					      scanlineStride,
 | 
						|
					      bandOffsets);
 | 
						|
    return createWritableRaster(sm, location);
 | 
						|
  }
 | 
						|
 | 
						|
  public static WritableRaster createBandedRaster(int dataType, 
 | 
						|
						  int w, int h, int bands,
 | 
						|
						  Point location)
 | 
						|
  {
 | 
						|
    // FIXME: Implement;
 | 
						|
    throw new UnsupportedOperationException("not implemented yet");
 | 
						|
  }
 | 
						|
 | 
						|
  public static WritableRaster createBandedRaster(int dataType,
 | 
						|
						  int w, int h,
 | 
						|
						  int scanlineStride,
 | 
						|
						  int[] bankIndices,
 | 
						|
						  int[] bandOffsets,
 | 
						|
						  Point location)
 | 
						|
  {
 | 
						|
    // FIXME: Implement;
 | 
						|
    throw new UnsupportedOperationException("not implemented yet");
 | 
						|
  }
 | 
						|
  
 | 
						|
  public static WritableRaster createPackedRaster(int dataType,
 | 
						|
						  int w, int h,
 | 
						|
						  int[] bandMasks,
 | 
						|
						  Point location)
 | 
						|
  {
 | 
						|
    SampleModel sm = new SinglePixelPackedSampleModel(dataType,
 | 
						|
						      w, h,
 | 
						|
						      bandMasks);
 | 
						|
    return createWritableRaster(sm, location);
 | 
						|
  }
 | 
						|
 | 
						|
  public static WritableRaster
 | 
						|
  createInterleavedRaster(DataBuffer dataBuffer, int w, int h,
 | 
						|
			  int scanlineStride, int pixelStride,
 | 
						|
			  int[] bandOffsets, Point location)
 | 
						|
  {
 | 
						|
    SampleModel sm = new ComponentSampleModel(dataBuffer.getDataType(),
 | 
						|
					      w, h,
 | 
						|
					      scanlineStride,
 | 
						|
					      pixelStride,
 | 
						|
					      bandOffsets);
 | 
						|
    return createWritableRaster(sm, dataBuffer, location);
 | 
						|
  }
 | 
						|
 | 
						|
  public static
 | 
						|
  WritableRaster createBandedRaster(DataBuffer dataBuffer,
 | 
						|
				    int w, int h,
 | 
						|
				    int scanlineStride,
 | 
						|
				    int[] bankIndices,
 | 
						|
				    int[] bandOffsets,
 | 
						|
				    Point location)
 | 
						|
  {
 | 
						|
    // FIXME: Implement;
 | 
						|
    throw new UnsupportedOperationException("not implemented yet");
 | 
						|
  }
 | 
						|
  
 | 
						|
  public static WritableRaster
 | 
						|
  createPackedRaster(DataBuffer dataBuffer,
 | 
						|
		     int w, int h,
 | 
						|
		     int scanlineStride,
 | 
						|
		     int[] bandMasks,
 | 
						|
		     Point location) {
 | 
						|
    SampleModel sm =
 | 
						|
      new SinglePixelPackedSampleModel(dataBuffer.getDataType(),
 | 
						|
				       w, h,
 | 
						|
				       scanlineStride,
 | 
						|
				       bandMasks);
 | 
						|
    return createWritableRaster(sm, dataBuffer, location);
 | 
						|
  }
 | 
						|
    
 | 
						|
  public static Raster createRaster(SampleModel sm, DataBuffer db,
 | 
						|
				    Point location)
 | 
						|
  {
 | 
						|
    return new Raster(sm, db, location);
 | 
						|
  }
 | 
						|
 | 
						|
  public static WritableRaster createWritableRaster(SampleModel sm,
 | 
						|
						    Point location)
 | 
						|
  {
 | 
						|
    return new WritableRaster(sm, location);
 | 
						|
  }
 | 
						|
 | 
						|
  public static WritableRaster createWritableRaster(SampleModel sm,
 | 
						|
						    DataBuffer db,
 | 
						|
						    Point location)
 | 
						|
  {
 | 
						|
    return new WritableRaster(sm, db, location);
 | 
						|
  }
 | 
						|
 | 
						|
  public Raster getParent()
 | 
						|
  {
 | 
						|
    return parent;
 | 
						|
  }
 | 
						|
 | 
						|
  public final int getSampleModelTranslateX()
 | 
						|
  {
 | 
						|
    return sampleModelTranslateX;
 | 
						|
  }
 | 
						|
 | 
						|
  public final int getSampleModelTranslateY()
 | 
						|
  {
 | 
						|
    return sampleModelTranslateY;
 | 
						|
  }
 | 
						|
 | 
						|
  public WritableRaster createCompatibleWritableRaster()
 | 
						|
  {
 | 
						|
    return new WritableRaster(getSampleModel(), new Point(minX, minY));
 | 
						|
  }
 | 
						|
 | 
						|
  public WritableRaster createCompatibleWritableRaster(int w, int h)
 | 
						|
  {
 | 
						|
    return createCompatibleWritableRaster(minX, minY, w, h);
 | 
						|
  }
 | 
						|
 | 
						|
  public WritableRaster createCompatibleWritableRaster(Rectangle rect)
 | 
						|
  {
 | 
						|
    return createCompatibleWritableRaster(rect.x, rect.y,
 | 
						|
					  rect.width, rect.height);
 | 
						|
  }
 | 
						|
 | 
						|
  public WritableRaster createCompatibleWritableRaster(int x, int y,
 | 
						|
						       int w, int h)
 | 
						|
  {
 | 
						|
    SampleModel sm = getSampleModel().createCompatibleSampleModel(w, h);
 | 
						|
    return new WritableRaster(sm, sm.createDataBuffer(),
 | 
						|
			      new Point(x, y));
 | 
						|
  }
 | 
						|
 | 
						|
  public Raster createTranslatedChild(int childMinX, int childMinY) {
 | 
						|
    int tcx = sampleModelTranslateX - minX + childMinX;
 | 
						|
    int tcy = sampleModelTranslateY - minY + childMinY;
 | 
						|
    
 | 
						|
    return new Raster(sampleModel, dataBuffer,
 | 
						|
		      new Rectangle(childMinX, childMinY,
 | 
						|
				    width, height),
 | 
						|
		      new Point(tcx, tcy),
 | 
						|
		      this);
 | 
						|
  }
 | 
						|
 | 
						|
  public Raster createChild(int parentX, int parentY, int width,
 | 
						|
			    int height, int childMinX, int childMinY,
 | 
						|
			    int[] bandList)
 | 
						|
  {
 | 
						|
    /* FIXME: Throw RasterFormatException if child bounds extends
 | 
						|
       beyond the bounds of this raster. */
 | 
						|
 | 
						|
    SampleModel sm = (bandList == null) ?
 | 
						|
      sampleModel :
 | 
						|
      sampleModel.createSubsetSampleModel(bandList);
 | 
						|
 | 
						|
    /*
 | 
						|
        data origin
 | 
						|
       /
 | 
						|
      +-------------------------
 | 
						|
      |\. __ parent trans
 | 
						|
      | \`.  
 | 
						|
      |  \ `.    parent origin
 | 
						|
      |   \  `. /
 | 
						|
      |   /\   +-------- - -
 | 
						|
      |trans\ /<\-- deltaTrans
 | 
						|
      |child +-+-\---- - - 
 | 
						|
      |     /|`|  \__ parent [x, y]
 | 
						|
      |child | |`. \
 | 
						|
      |origin| :  `.\
 | 
						|
      |      |    / `\
 | 
						|
      |      :   /    +
 | 
						|
      | child [x, y] 
 | 
						|
 | 
						|
      parent_xy - parent_trans = child_xy - child_trans
 | 
						|
 | 
						|
      child_trans = parent_trans + child_xy - parent_xy
 | 
						|
    */
 | 
						|
 | 
						|
    return new Raster(sm, dataBuffer,
 | 
						|
		      new Rectangle(childMinX, childMinY,
 | 
						|
				    width, height),
 | 
						|
		      new Point(sampleModelTranslateX+childMinX-parentX,
 | 
						|
				sampleModelTranslateY+childMinY-parentY),
 | 
						|
		      this);
 | 
						|
  }
 | 
						|
 | 
						|
  public Rectangle getBounds()
 | 
						|
  {
 | 
						|
    return new Rectangle(minX, minY, width, height);
 | 
						|
  }
 | 
						|
 | 
						|
  public final int getMinX()
 | 
						|
  {
 | 
						|
    return minX;
 | 
						|
  }
 | 
						|
 | 
						|
  public final int getMinY()
 | 
						|
  {
 | 
						|
    return minY;
 | 
						|
  }
 | 
						|
 | 
						|
  public final int getWidth()
 | 
						|
  {
 | 
						|
    return width;
 | 
						|
  }
 | 
						|
 | 
						|
  public final int getHeight()
 | 
						|
  {
 | 
						|
    return height;
 | 
						|
  }
 | 
						|
 | 
						|
  public final int getNumDataElements()
 | 
						|
  {
 | 
						|
    return numDataElements;
 | 
						|
  }
 | 
						|
    
 | 
						|
  public final int getTransferType()
 | 
						|
  {
 | 
						|
    return sampleModel.getTransferType();
 | 
						|
  }
 | 
						|
 | 
						|
  public DataBuffer getDataBuffer()
 | 
						|
  {
 | 
						|
    return dataBuffer;
 | 
						|
  }
 | 
						|
 | 
						|
  public SampleModel getSampleModel()
 | 
						|
  {
 | 
						|
    return sampleModel;
 | 
						|
  }
 | 
						|
 | 
						|
  public Object getDataElements(int x, int y, Object outData)
 | 
						|
  {
 | 
						|
    return sampleModel.getDataElements(x-sampleModelTranslateX,
 | 
						|
				       y-sampleModelTranslateY,
 | 
						|
				       outData, dataBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  public Object getDataElements(int x, int y, int w, int h,
 | 
						|
				Object outData)
 | 
						|
  {
 | 
						|
    return sampleModel.getDataElements(x-sampleModelTranslateX,
 | 
						|
				       y-sampleModelTranslateY,
 | 
						|
				       w, h, outData, dataBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  public int[] getPixel(int x, int y, int[] iArray)
 | 
						|
  {
 | 
						|
    return sampleModel.getPixel(x-sampleModelTranslateX,
 | 
						|
				y-sampleModelTranslateY,
 | 
						|
				iArray, dataBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  public float[] getPixel(int x, int y, float[] fArray)
 | 
						|
  {
 | 
						|
    return sampleModel.getPixel(x-sampleModelTranslateX,
 | 
						|
				y-sampleModelTranslateY,
 | 
						|
				fArray, dataBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  public double[] getPixel(int x, int y, double[] dArray)
 | 
						|
  {
 | 
						|
    return sampleModel.getPixel(x-sampleModelTranslateX,
 | 
						|
				y-sampleModelTranslateY,
 | 
						|
				dArray, dataBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  public int[] getPixels(int x, int y, int w, int h, int[] iArray)
 | 
						|
  {
 | 
						|
    return sampleModel.getPixels(x-sampleModelTranslateX,
 | 
						|
				 y-sampleModelTranslateY,
 | 
						|
				 w, h, iArray, dataBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  public float[] getPixels(int x, int y, int w, int h,
 | 
						|
			   float[] fArray)
 | 
						|
  {
 | 
						|
    return sampleModel.getPixels(x-sampleModelTranslateX,
 | 
						|
				 y-sampleModelTranslateY,
 | 
						|
				 w, h, fArray, dataBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  public double[] getPixels(int x, int y, int w, int h,
 | 
						|
			    double[] dArray)
 | 
						|
  {
 | 
						|
    return sampleModel.getPixels(x-sampleModelTranslateX,
 | 
						|
				 y-sampleModelTranslateY,
 | 
						|
				 w, h, dArray, dataBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  public int getSample(int x, int y, int b)
 | 
						|
  {
 | 
						|
    return sampleModel.getSample(x-sampleModelTranslateX,
 | 
						|
				 y-sampleModelTranslateY,
 | 
						|
				 b, dataBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  public float getSampleFloat(int x, int y, int b)
 | 
						|
  {
 | 
						|
    return sampleModel.getSampleFloat(x-sampleModelTranslateX,
 | 
						|
				      y-sampleModelTranslateY,
 | 
						|
				      b, dataBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  public double getSampleDouble(int x, int y, int b)
 | 
						|
  {
 | 
						|
    return sampleModel.getSampleDouble(x-sampleModelTranslateX,
 | 
						|
				       y-sampleModelTranslateY,
 | 
						|
				       b, dataBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  public int[] getSamples(int x, int y, int w, int h, int b,
 | 
						|
			  int[] iArray)
 | 
						|
  {
 | 
						|
    return sampleModel.getSamples(x-sampleModelTranslateX,
 | 
						|
				  y-sampleModelTranslateY,
 | 
						|
				  w, h, b, iArray, dataBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  public float[] getSamples(int x, int y, int w, int h, int b,
 | 
						|
			    float[] fArray)
 | 
						|
  {
 | 
						|
    return sampleModel.getSamples(x-sampleModelTranslateX,
 | 
						|
				  y-sampleModelTranslateY,
 | 
						|
				  w, h, b, fArray, dataBuffer);
 | 
						|
  }
 | 
						|
 | 
						|
  public double[] getSamples(int x, int y, int w, int h, int b,
 | 
						|
			     double[] dArray)
 | 
						|
  {
 | 
						|
    return sampleModel.getSamples(x-sampleModelTranslateX,
 | 
						|
				  y-sampleModelTranslateY,
 | 
						|
				  w, h, b, dArray, dataBuffer);
 | 
						|
  }
 | 
						|
}
 |