Listing 5: An AffineTransformOp filter applied to a raster obtained for an array of pixels.
Listing-ul RasterAffineTransformOp.java
import java.awt.*;
import java.awt.image.*;
import java.awt.geom.*;
class FilterRaster extends Frame{
BufferedImage BIR=null;
//the BufferedImage used for drawing raster on screen
ColorModel CM=null;
//ColorModel object
//the array of pixels
static final byte[] ICM={
0,2,2,2,2,0,0,3,4,3,4,3,4,3,4,3,4,3,0,0,2,2,2,2,0,
0,2,2,2,2,0,0,4,3,4,3,4,3,4,3,4,3,4,0,0,2,2,2,2,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,
7,7,0,0,0,1,5,5,5,5,5,5,5,5,5,5,5,5,5,1,0,0,0,7,7,
7,7,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,7,7,
7,7,0,0,0,0,0,0,0,0,1,1,6,1,1,0,0,0,0,0,0,0,0,7,7,
7,7,0,0,0,0,0,0,0,0,1,1,6,1,1,0,0,0,0,0,0,0,0,7,7,
7,7,0,0,0,0,0,0,0,0,1,1,6,1,1,0,0,0,0,0,0,0,0,7,7,
7,7,0,0,0,0,0,0,0,0,1,1,6,1,1,0,0,0,0,0,0,0,0,7,7,
0,0,0,0,0,0,0,0,0,0,1,1,6,1,1,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,1,1,6,1,1,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,0,0,0,0,1,1,6,1,1,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,0,0,0,0,1,1,6,1,1,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,0,0,0,0,1,1,6,1,1,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,0,0,0,1,1,1,6,1,1,0,0,0,0,0,0,0,0,0,0,
0,1,1,1,1,1,1,1,1,1,1,1,6,1,1,0,0,0,0,0,0,0,0,0,0,
0,0,1,1,1,1,1,1,1,1,1,1,6,1,1,1,0,0,0,0,0,0,0,0,0,
0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,
0,0,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
};
public FilterRaster(String title)
{
super(title);
}
void init()
{
setLayout(null);
setSize(115,150);
setVisible(true);
}
//defining an index color model
private IndexColorModel indexCM()
{
byte[]r={(byte)255, (byte)255, (byte)0, (byte)0, (byte)0, (byte)255, (byte)128, (byte)255};
byte[]g={(byte)0, (byte)255, (byte)0, (byte)255, (byte)0, (byte)255, (byte)128, (byte)200};
byte[]b={(byte)0, (byte)255, (byte)0, (byte)0, (byte)255, (byte)0, (byte)128, (byte)0};
return new IndexColorModel(2,8,r,g,b);
}
void Filter()
{
//ColorModel
CM=indexCM();
//DataBuffer
DataBuffer DB=new DataBufferByte(ICM,(25*25),0);
//SampleModel
int[] BM=new int[]{(byte)0xf};
SampleModel SM=new SinglePixelPackedSampleModel(DataBuffer.TYPE_BYTE,25,25,BM);
//create the raster
Point P=new Point(0,0);
WritableRaster R=Raster.createWritableRaster(SM,DB,P);
WritableRaster Q=null;
try{
//apply the filter to the raster
AffineTransform AT=new AffineTransform();
AT.scale(3.0,3.0);
AffineTransformOp ATOp=new AffineTransformOp(AT,AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
Q=ATOp.createCompatibleDestRaster(R);
ATOp.filter(R,Q);
}catch(IllegalArgumentException e)
{System.out.println(e.getMessage());}
//convert the raster to the BufferedImage
BIR=new BufferedImage(CM,Q,false,null);
}
public void paint(Graphics g)
{
//drawing the raster
g.drawImage(BIR,25,50,this);
}
}
public class RasterAffineTransformOp{
public static void main(String[] args)
{
FilterRaster t=new FilterRaster("JavaTile");
t.Filter();
t.init();
}
}
New on the Java Boutique:
New Review:
Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling
API boasts simplicity, ease-of-integration, a well-rounded feature
set, and it's free!
New Applet:
Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA
sequences into three useful formats.
Elsewhere on internet.com:
WebDeveloper Java
Lots of Java information on webdeveloper.com
WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.
ScriptSearch Java
Hundreds of free Java code files to download.
jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.
|