2013-11-22 30 views
1

我試圖使一個棕褐色效果,我需要使一些顏色減少到一定的百分比。我的編譯器錯誤是這些:爪哇顏色undefined

Error: The constructor java.awt.Color(double, double, double) is undefined 

Error: The constructor java.awt.Color(int, int, double) is undefined 

Error: The constructor java.awt.Color(int, int, double) is undefined 

這是我的代碼:

public void sepiaTint() 
    { 
    Pixel[] pixelArray = this.getPixels(); 
    for (int i = 0; i < pixelArray.length; i++) 
    { 
    Pixel pixelObj = pixelArray[i]; 
    int amountRed = pixelObj.getRed(); 
    int amountGreen = pixelObj.getGreen(); 
    int amountBlue = pixelObj.getBlue(); 

    if (amountRed < 60) 
    { 
     Color newColor = new Color(amountRed*0.9, amountGreen*0.9, amountBlue*0.9); 
     pixelObj.setColor(newColor); 
    } 
    if (amountRed >= 60 && amountRed <190) 
    { 
     Color newColor = new Color(amountRed, amountGreen, amountBlue*0.8); 
     pixelObj.setColor(newColor); 
    } 
    else 
    { 
     Color newColor = new Color(amountRed, amountGreen, amountBlue*0.9); 
     pixelObj.setColor(newColor); 
    } 
    } 
    this.repaint(); 
    } 
+0

林認爲這可能與我的新顏色聲明不是所有整數。 – user2984690

+0

將這些值轉換爲'float'或'int'可能會有所幫助。 –

回答

1

Pixel.getRed()返回一個整數,所以Color(float, float, float)對你沒用。你想要的是Color(int, int, int)的構造函數。

0.9被解釋爲雙精度型,所以你必須在計算你的值後再次將它轉換爲int。

Color newColor = new Color((int)(amountRed*0.9), (int)(amountGreen*0.9), (int)(amountBlue*0.9)); 
+1

+1。這實際上是正確的答案,因爲使用以float爲參數的構造函數會導致顏色大於1.0,這是float參數的上限。 –

1

Color() cunstructor應該是這樣的

new Color(amountRed*0.9F, amountGreen*0.9F, amountBlue*0.9F) 

new Color((int)(amountRed*0.9), (int)(amountGreen*0.9), (int)(amountBlue*0.9)) 
new Color(amountRed, amountGreen, (int)amountBlue*0.8) 

0.9被視爲doubleColor沒有任何具有double參數的cunstructor。所以0.9應轉換爲float0.9F

+0

OP從'Pixel.getRed()'獲取0到255之間的一個整數的顏色值。 'Color(float,float,float)'構造函數的值介於0.0和1.0之間。這只是不起作用。 –

+0

@GeraldSchneider好的...更改答案 –

0

試試這個..

Color newColor = new Color(amountRed*0.9F, amountGreen*0.9F, amountBlue*0.9F);