2014-12-02 30 views
0

我試圖更改圖像的亮度,對比度和其他值。我發現,我使用for循環經典雙了很多這些操作的,只是運行的雙迴路內的一些簡單的數學,如下圖所示:創建通用方法以將特定方法作爲參數運行

public void changeBrightness(int brightness) 
{ 
     for(int i=0; i<height; i++) 
     { 
      for(int j=0; j<width; j++) 
      { 
       pixels[j][i] = MathUtils.ensureRange(pixels[j][i] + brightness,0,254); 
      } 
     } 
} 

不過,我現在需要以幾乎完全相同的形式創建一個changeContrast方法,並且我想讓這些操作在設置像素的時候插入一點點不同的數學。所以,我想用double for循環創建一個泛型方法,它將執行一個作爲參數傳遞的方法。在Java 7中我會怎麼做呢?下面是我在想什麼的例子:

public void runPixelOperation(***pixel operation method goes here***) 
    { 
     for(int i=0; i<height; i++) 
     { 
      for(int j=0; j<width; j++) 
      { 
       pixels[j][i] = ***run pixel operation here*** 
      } 
     } 
    } 
+0

僅限Java 8?還是早期版本呢? – markspace 2014-12-02 18:27:31

回答

5

爲什麼不使用接口爲接口做這個問題!

interface PixelLogic { 
    public int doOperation(); 
} 

class BlurLogic implements PixelLogic { 
    @Override 
    public int doOperation() { 
     return // some calculated value 
    } 
} 

class SomeClass { 

    public void runPixelOperation(PixelLogic logic) { 
     for(int i = 0; i < height; i++) { 
      for(int j = 0; j < width; j++) { 
       pixels[j][i] = logic.doOperation(); 
      } 
     } 
    } 

} 
0

你沒有提到你使用的是什麼版本的Java,但是這是哪門子事的Java lambda表達式打算爲。

1

創建一個接口,例如PixelOperation,並聲明一個方法。該方法在調用時可能會從pixels[j][j]獲取一個值。

runPixelOperation取一個參數,PixelOperation的一個實例。調用該方法,傳遞pixels[j][i]

當調用runPixelOperation時,調用者將傳遞PixelOperation的具體實例作爲子類,匿名子類或lambda表達式。

runPixelOperation((value) -> MathUtils.ensureRange(value + brightness,0,254));