我們也可以采用緩沖區(qū)來對圖像進行處理。
在JAVA2D中圖像處理模型是即時模式。
利用即時模式圖像處理模型可以在內(nèi)存中存儲固定分辨率的圖像,也可以對圖像數(shù)據(jù)進行過濾處理。
JAVA2D在圖像處理方面提供一對接口:
實現(xiàn)這兩個接口的類包括:
他們用來定義緩沖區(qū)圖像和光柵圖像的操作。
也可以產(chǎn)生幾何變換,鈍化,銳化,增強對比,閥值,和圖像顏色校正等圖像處理效果。
如何使用緩沖區(qū):
PS:im是某個Image的引用
1)創(chuàng)建。
還有三種不同的構造器。參看文檔。
2)緩沖區(qū)上繪圖。
先返回圖像的上下文:
利用這個對象將欲繪制的圖像送入緩沖區(qū)。
3)顯示緩沖區(qū)圖像,利用Graphics2D 的drawImage方法將緩沖區(qū)圖像繪制到屏幕上。
比如在JPanel的paintComponent() 方法當中
下面步驟分析我總是假設人們需要在一個顯示面板上顯示,所以最后都加入了一個repaint();步驟
思路:
1)創(chuàng)建RescaleFactor和Offsets,他們可以是float型,也可以是float類型的數(shù)組。
2)創(chuàng)建RescaleOp對象。
RescaleOp rescale=new RescaleOp(scaleFactor,offset,null);
3)將過濾應用于緩沖rescale.filter(bi,bi);
4)repaint();
1)創(chuàng)建色彩空間對象.
ColorSpace cs=ColorSpace.getInstance(ColorSpace.CS_GRAY);
2)創(chuàng)建顏色過濾器
ColorConvertOp op=new ColorConvertOp(cs,null);
3)將過濾應用于緩沖op.filter(bi,bi);
4)repaint();
1)創(chuàng)建float類型的數(shù)組,不同的數(shù)組決定了不同的處理功能。
//下面可以達到銳化效果
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)創(chuàng)建卷積核對像_前兩個參數(shù)表明寬度和高度。
Kernel kernel=new Kernel(3,3,data);
3)創(chuàng)建卷積過濾器實例n ConvolveOp convolve=new Convolve(kernel,Convolve.EDGE_NO_OP,null);
4)將過濾應用于緩沖convolve.filter(bisrc,bidest);
5)repaint();
對緩沖區(qū)圖像進行縮放,拉伸,平移,旋轉(zhuǎn),等等。
1)定義仿射變換:AffineTransform類對象
:AffineTransform transform =new AffineTransform();
2)對仿射變換對象進行設置變換,包括縮放,平移,拉伸,旋轉(zhuǎn)等等。
transform.setToScale(double x,double y);//縮放
transform.setToShear(double x,double y);//平移
transform.setToTranslation(double x,double y);//拉伸
transform.setToRotation(double x,double y);//旋轉(zhuǎn)
3)根據(jù)仿射變換過濾器創(chuàng)建過濾器對象
AffineTransformOp op=new AffineTransformOp(transform,null);
4)將過濾應用于緩沖op.filter(bisrc,bidest);
5)repaint();
在JAVA2D中圖像處理模型是即時模式。
利用即時模式圖像處理模型可以在內(nèi)存中存儲固定分辨率的圖像,也可以對圖像數(shù)據(jù)進行過濾處理。
JAVA2D在圖像處理方面提供一對接口:
1 |
BufferedImageOp和RasterOp。 |
實現(xiàn)這兩個接口的類包括:
1 |
AffineTransformOp, BandCombineOp, ColorConvertOp, ConvolveOp, LookupOp和RescaleOp等等 |
他們用來定義緩沖區(qū)圖像和光柵圖像的操作。
也可以產(chǎn)生幾何變換,鈍化,銳化,增強對比,閥值,和圖像顏色校正等圖像處理效果。
如何使用緩沖區(qū):
PS:im是某個Image的引用
1)創(chuàng)建。
1 |
BufferedImage bi= new BufferedImage(getWidth(),getHight(),BufferedImage.TYPE_INT_ARGB); |
還有三種不同的構造器。參看文檔。
2)緩沖區(qū)上繪圖。
先返回圖像的上下文:
1 |
Graphics2D big=bi.creatGraphics(); |
利用這個對象將欲繪制的圖像送入緩沖區(qū)。
1 |
big.drawImage(im,0,0,this); |
3)顯示緩沖區(qū)圖像,利用Graphics2D 的drawImage方法將緩沖區(qū)圖像繪制到屏幕上。
比如在JPanel的paintComponent() 方法當中
1 |
Graphics2D g2D=(Grahpics2D)g; g2D.drawImage(bi,0,0,this); |
下面步驟分析我總是假設人們需要在一個顯示面板上顯示,所以最后都加入了一個repaint();步驟
1 |
查找表過濾器: LookupOp:rgba四個參數(shù)進行修改。 |
1 |
RescaleOp:重調(diào)過濾器:類似前者。 |
思路:
1)創(chuàng)建RescaleFactor和Offsets,他們可以是float型,也可以是float類型的數(shù)組。
2)創(chuàng)建RescaleOp對象。
RescaleOp rescale=new RescaleOp(scaleFactor,offset,null);
3)將過濾應用于緩沖rescale.filter(bi,bi);
4)repaint();
1 |
ColorConvertOp色彩轉(zhuǎn)換過濾——灰度<->彩色 |
1)創(chuàng)建色彩空間對象.
ColorSpace cs=ColorSpace.getInstance(ColorSpace.CS_GRAY);
2)創(chuàng)建顏色過濾器
ColorConvertOp op=new ColorConvertOp(cs,null);
3)將過濾應用于緩沖op.filter(bi,bi);
4)repaint();
1 |
ConvolveOp卷積過濾實例 |
1)創(chuàng)建float類型的數(shù)組,不同的數(shù)組決定了不同的處理功能。
//下面可以達到銳化效果
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)創(chuàng)建卷積核對像_前兩個參數(shù)表明寬度和高度。
Kernel kernel=new Kernel(3,3,data);
3)創(chuàng)建卷積過濾器實例n ConvolveOp convolve=new Convolve(kernel,Convolve.EDGE_NO_OP,null);
4)將過濾應用于緩沖convolve.filter(bisrc,bidest);
5)repaint();
1 |
AffineTransform仿射變換: |
對緩沖區(qū)圖像進行縮放,拉伸,平移,旋轉(zhuǎn),等等。
1)定義仿射變換:AffineTransform類對象
:AffineTransform transform =new AffineTransform();
2)對仿射變換對象進行設置變換,包括縮放,平移,拉伸,旋轉(zhuǎn)等等。
transform.setToScale(double x,double y);//縮放
transform.setToShear(double x,double y);//平移
transform.setToTranslation(double x,double y);//拉伸
transform.setToRotation(double x,double y);//旋轉(zhuǎn)
3)根據(jù)仿射變換過濾器創(chuàng)建過濾器對象
AffineTransformOp op=new AffineTransformOp(transform,null);
4)將過濾應用于緩沖op.filter(bisrc,bidest);
5)repaint();