我们也可以采用缓冲区来对图像进行处理。 
  在JAVA2D中图像处理模型是即时模式。 
  利用即时模式图像处理模型可以在内存中存储固定分辨率的图像,也可以对图像数据进行过滤处理。 
  JAVA2D在图像处理方面提供一对接口:  
    
        
            
            1
  
             | 
            
            BufferedImageOp和RasterOp。
            
             | 
         
    
 
 实现这两个接口的类包括:  
    
        
            
            1 2 3 4 5
  
             | 
            
            AffineTransformOp,
            BandCombineOp,
            ColorConvertOp,
            ConvolveOp,
            LookupOp和RescaleOp等等
            
             | 
         
    
 
  他们用来定义缓冲区图像和光栅图像的操作。  也可以产生几何变换,钝化,锐化,增强对比,阀值,和图像颜色校正等图像处理效果。 
  如何使用缓冲区: 
  PS:im是某个Image的引用  1)创建。  
    
        
            
            1
  
             | 
            
            BufferedImage bi= new BufferedImage(getWidth(),getHight(),BufferedImage.TYPE_INT_ARGB);
            
             | 
         
    
 
 还有三种不同的构造器。参看文档。  2)缓冲区上绘图。  先返回图像的上下文:  
    
        
            
            1
  
             | 
            
            Graphics2D big=bi.creatGraphics();
            
             | 
         
    
 
 利用这个对象将欲绘制的图像送入缓冲区。  
    
        
            
            1
  
             | 
            
             big.drawImage(im,0,0,this);
            
             | 
         
    
 
 3)显示缓冲区图像,利用Graphics2D 的drawImage方法将缓冲区图像绘制到屏幕上。  比如在JPanel的paintComponent() 方法当中  
    
        
            
            1 2
  
             | 
            
            Graphics2D g2D=(Grahpics2D)g;
            g2D.drawImage(bi,0,0,this);
            
             | 
         
    
 
  下面步骤分析我总是假设人们需要在一个显示面板上显示,所以最后都加入了一个repaint();步骤  
    
        
            
            1 2
  
             | 
            
            查找表过滤器:
            LookupOp:rgba四个参数进行修改。
            
             | 
         
    
 
  
 思路:  1)创建RescaleFactor和Offsets,他们可以是float型,也可以是float类型的数组。  2)创建RescaleOp对象。  RescaleOp rescale=new RescaleOp(scaleFactor,offset,null);  3)将过滤应用于缓冲rescale.filter(bi,bi);  4)repaint(); 
  
    
        
            
            1
  
             | 
            
            ColorConvertOp色彩转换过滤——灰度<->彩色
            
             | 
         
    
 
 1)创建色彩空间对象.  ColorSpace cs=ColorSpace.getInstance(ColorSpace.CS_GRAY);  2)创建颜色过滤器  ColorConvertOp op=new ColorConvertOp(cs,null);  3)将过滤应用于缓冲op.filter(bi,bi);  4)repaint(); 
  
 1)创建float类型的数组,不同的数组决定了不同的处理功能。  //下面可以达到锐化效果  float data[]={-1.0f,-1.0f,-1.0f,-1.0f,9.0f,-1.0f,-1.0f,-1.0f,-1.0f,}  //下面可以达到雾化效果  float data[]={1.0f/9.0f,1.0f/10.0f,1.0f/9.0f,1.0f/12.0f,1.0f/10.0f,1.0f/9.0f,1.0f/9.0f,1.0f/10.0f,1.0f/9.0f,}  //下面可以达到边缘化效果  float data[]={0.0f,1.0f,0.0f, -1.0f,4.0f,-1.0f , 0.0f,-1.0f,0.0f}  2)创建卷积核对像_前两个参数表明宽度和高度。  Kernel kernel=new Kernel(3,3,data);  3)创建卷积过滤器实例n ConvolveOp convolve=new Convolve(kernel,Convolve.EDGE_NO_OP,null);  4)将过滤应用于缓冲convolve.filter(bisrc,bidest);  5)repaint(); 
 
  
 对缓冲区图像进行缩放,拉伸,平移,旋转,等等。 
  1)定义仿射变换:AffineTransform类对象  :AffineTransform transform =new AffineTransform();  2)对仿射变换对象进行设置变换,包括缩放,平移,拉伸,旋转等等。  transform.setToScale(double x,double y);//缩放  transform.setToShear(double x,double y);//平移  transform.setToTranslation(double x,double y);//拉伸  transform.setToRotation(double x,double y);//旋转  3)根据仿射变换过滤器创建过滤器对象  AffineTransformOp op=new AffineTransformOp(transform,null);  4)将过滤应用于缓冲op.filter(bisrc,bidest);  5)repaint(); 
	 
	
	
 
 
	    
    
 
				
 |