2016-04-20 66 views
0

基本上我做了一個界面,顯示一個圖片,它有多個JSliders。每個人都有不同的功能,如模糊,變亮和飽和。我已經實現了滑塊,以便在添加新滑塊時覆蓋stateChanged方法。當我單獨執行滑塊時,此工作正常,但是一旦我使用不同的滑塊,它就會變回原始圖片。我想讓它使圖片在照片上積累過濾器。有什麼建議麼?這是我的一個滑塊的例子。試圖使圖片過濾器的效果累積在照片-java搖擺

brightSlider.addChangeListener(new ChangeListener() { 

     @Override 
     public void stateChanged(ChangeEvent e) { 

      JSlider source = (JSlider) e.getSource(); 
      double scaleValue = source.getValue()/100.0; 
      Picture newPic = new PictureImpl(picture.getWidth(), picture.getHeight()); 
      //Picture newPic = picture; 
      Pixel zeroPixel = new ColorPixel(0, 0, 0); 
      Pixel p; 
      for (int i = 0; i < picture.getWidth(); i++) { 
       for (int j = 0; j < picture.getHeight(); j++) { 
        newPic.setPixel(i, j, zeroPixel); 
       } 
      } 
      for (int i = 0; i < picture.getWidth(); i++) { 
       for (int j = 0; j < picture.getHeight(); j++) { 
        if (scaleValue > 0) { 
         p = picture.getPixel(i, j).lighten(scaleValue); 
         newPic.setPixel(i, j, p); 
        } else if (scaleValue < 0) { 
         p = picture.getPixel(i, j).darken(scaleValue); 
         newPic.setPixel(i, j, p); 
        } 
       } 
      } 
      setPic(newPic); 
      picture_view.setPicture(newPic.createObservable()); 
     } 
    }); 
+1

如果沒有可用的例子,我會建議,具有要應用效果的'List',所以如果你需要,你可以刪除它們。每次需要時,都會拍攝原始圖像並將每種效果應用到它上面,這就成了您在屏幕上顯示的內容。當需要時,您可以將這些效果「烘烤」成最終圖片 – MadProgrammer

回答

1

Image processing with Java 2D所示,你可以創建一個Map<String, BufferedImageOp>持有的BufferedImageOp接口的具體實例。

Map<String, BufferedImageOp> ops = new TreeMap<String, BufferedImageOp>(); 
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY); 
ops.put("Gray", new ColorConvertOp(cs, null)); 
… 

添加Map鍵設置爲JComboBox

final JComboBox opBox = new JComboBox(); 
for (String key : ops.keySet()) { 
    opBox.addItem(key); 
} 

在組合的處理程序,調用你的目標BufferedImage圖像運算的filter()方法。

String key = (String) opBox.getSelectedItem(); 
BufferedImageOp op = ops.get(key); 
bufferedImage = op.filter(bufferedImage, null); 

下圖說明了「閾值64」後跟「反轉」。 ImageDicer是一個完整的例子。

image