小菜樂園

          生活就是一杯茶

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            8 Posts :: 0 Stories :: 3 Comments :: 0 Trackbacks
          我們也可以采用緩沖區(qū)來對圖像進行處理。

          在JAVA2D中圖像處理模型是即時模式。

          利用即時模式圖像處理模型可以在內(nèi)存中存儲固定分辨率的圖像,也可以對圖像數(shù)據(jù)進行過濾處理。

          JAVA2D在圖像處理方面提供一對接口:
          1
          BufferedImageOp和RasterOp。
                      

          實現(xiàn)這兩個接口的類包括:
          1
          2
          3
          4
          5
          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
          2
          Graphics2D g2D=(Grahpics2D)g;
                      g2D.drawImage(bi,0,0,this);
                      


          下面步驟分析我總是假設人們需要在一個顯示面板上顯示,所以最后都加入了一個repaint();步驟
          1
          2
          查找表過濾器:
                      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();

          posted on 2007-08-17 10:58 小菜 閱讀(2045) 評論(0)  編輯  收藏 所屬分類: Java圖形圖像
          主站蜘蛛池模板: 松滋市| 金沙县| 崇礼县| 额济纳旗| 宜兰市| 彰化县| 常州市| 沛县| 蕉岭县| 神农架林区| 井冈山市| 淳化县| 西畴县| 土默特左旗| 高安市| 南汇区| 万荣县| 新巴尔虎右旗| 安义县| 渝中区| 云浮市| 芦溪县| 巍山| 邹平县| 油尖旺区| 平南县| 鸡西市| 宾阳县| 察哈| 海南省| 白朗县| 丰台区| 富阳市| 平昌县| 蓝田县| 平利县| 淳化县| 历史| 无极县| 图木舒克市| 岳西县|