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();
              }
}

How to Add Java Applets to Your Site

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.