小菜乐园

生活就是一杯茶

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  8 Posts :: 0 Stories :: 3 Comments :: 0 Trackbacks
我们也可以采用缓冲区来对图像进行处理。

在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
RescaleOp:重调过滤器:类似前者。
            

思路:
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
ConvolveOp卷积过滤实例
            

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仿射变换:
            

对缓冲区图像进行缩放,拉伸,平移,旋转,等等。

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

posted on 2007-08-17 10:58 小菜 阅读(2016) 评论(0)  编辑  收藏 所属分类: Java图形图像

只有注册用户登录后才能发表评论。


网站导航: