home *** CD-ROM | disk | FTP | other *** search
Java Source | 1996-08-14 | 4.2 KB | 129 lines |
- /*
- * @(#)/ZSliceVolumeFilter.java 1.3 96/03/30 by Andrew Barclay abb@nuccard.eushc.org
- *
- * Copyright (c) 1995 Andrew B. Barclay All Rights Reserved.
- */
-
- import java.awt.image.ColorModel ;
- import java.awt.Point ;
- import java.awt.Rectangle ;
-
- import SliceVolumeFilter ;
-
- /**
- * An ImageFilter class for sliceing volume images.
- * This class extends the basic ImageFilter Class to extract a given
- * slice of an existing Volume and provide a source for a
- * new image containing just the extracted slice. It is meant to
- * be used in conjunction with a FilteredImageSource object to produce
- * sliced versions of existing volumes.
- *
- * This one's easy.
- *
- * @see CropImageFilter
- * @see FilteredImageSource
- * @see ImageFilter
- * @see SliceVolumeFilter
- *
- * @version 1.1 95/12/06
- * @author Andrew Barclay
- */
-
- public class ZSliceVolumeFilter extends SliceVolumeFilter {
- boolean debug = false ;
-
- /**
- * Construct a SliceVolumeFilter that extracts a slice of the source
- * Volume specified by the ul, ll and ur parameters.
- * @param srcSlices[] the array of x,y positions of the source image slices
- * @param volWidth the width of the source volume
- * @param volHeight the height of the source volume
- * @param slice the slice number to be extracted
- * @param width the width of the slice to be extracted
- * @param height the height of the slice to be extracted
- */
- public ZSliceVolumeFilter( Point srcSlices[], int volWidth, int volHeight,
- double slice, int width, int height ) {
- super( srcSlices, volWidth, volHeight, slice, width, height ) ;
- type = 'Z' ;
- }
-
- /**
- * Determine if the delivered pixels intersect the slice to
- * be extracted and pass through only that subset of pixels that
- * appear in the output slice.
- */
- public void setPixels(int x, int y, int w, int h,
- ColorModel model, byte pixels[], int off,
- int scansize) {
- long ct = System.currentTimeMillis() ;
- Rectangle sr = new Rectangle( x, y, w, h ) ;
- int sz1 = firstZSlice( sr ) ;
- int sz2 = lastZSlice( sr ) ;
- /*
- dbg( "sr="+sr+" sz1="+sz1+" sz2="+sz2 ) ;
- dbg( "off="+off+" scansize="+scansize+" type="+type+" slice="+slice ) ;
- */
-
- // implement this properly later -- for now, just take orthogonal
- // slices.
- int islice = (int)( 0.5 + slice ) ;
- if( islice >= sz1 && islice < sz2 ) {
- int x1 = srcSlices[islice].x ;
- int y1 = srcSlices[islice].y ;
- int dx = (x1>x) ? x1-x : 0 ;
- int dy = (y1>y) ? y1-y : 0 ;
- Rectangle ir = sr.intersection(
- new Rectangle( x1, y1, width, height )
- ) ;
- dbg( "zslice="+islice+" ir="+ir ) ;
- dbg( "sr="+sr+" sz1="+sz1+" sz2="+sz2 ) ;
- if( ir.width > 0 && ir.height > 0 ) {
- consumer.setPixels( ir.x-x1, ir.y-y1, ir.width, ir.height,
- model, pixels, off + dx + dy*scansize, scansize ) ;
- dbg( "byte time= "+(System.currentTimeMillis()-ct)+" ms.\n" ) ;
- } else {
- Rectangle dr = new Rectangle( x1, y1, voldims[0], voldims[1] ) ;
- dbg( "Error: h<0, dr="+dr ) ;
- }
- }
- }
-
- public void setPixels(int x, int y, int w, int h,
- ColorModel model, int pixels[], int off,
- int scansize) {
- long ct = System.currentTimeMillis() ;
- Rectangle sr = new Rectangle( x, y, w, h ) ;
- int sz1 = firstZSlice( sr ) ;
- int sz2 = lastZSlice( sr ) ;
- /*
- dbg( "sr="+sr+" sz1="+sz1+" sz2="+sz2 ) ;
- dbg( "off="+off+" scansize="+scansize+" type="+type+" slice="+slice ) ;
- */
-
- // implement this properly later -- for now, just take orthogonal
- // slices.
- int islice = (int)( 0.5 + slice ) ;
- if( islice >= sz1 && islice < sz2 ) {
- int x1 = srcSlices[islice].x ;
- int y1 = srcSlices[islice].y ;
- int dx = (x1>x) ? x1-x : 0 ;
- int dy = (y1>y) ? y1-y : 0 ;
- Rectangle ir = sr.intersection(
- new Rectangle( x1, y1, width, height )
- ) ;
- dbg( "zslice="+islice+" ir="+ir ) ;
- dbg( "sr="+sr+" sz1="+sz1+" sz2="+sz2 ) ;
- if( ir.width > 0 && ir.height > 0 ) {
- consumer.setPixels( ir.x-x1, ir.y-y1, ir.width, ir.height,
- model, pixels, off + dx + dy*scansize, scansize ) ;
- dbg( "int time= "+(System.currentTimeMillis()-ct)+" ms.\n" ) ;
- } else {
- Rectangle dr = new Rectangle( x1, y1, voldims[0], voldims[1] ) ;
- dbg( "Error: h<0, dr="+dr ) ;
- }
- }
- }
-
- }
-