2011-11-30 161 views
1

我導出了Canvas類,其中在paint方法中我繪製了一個Image。當點擊一個Command時,我想在畫布中畫一個矩形和一個矩形內的字符串,並且圖像仍然會顯示在矩形後面,所以我想讓圖像變暗一點,因爲我想讓視覺效果像一個顯示LWUIT對話框(隱藏表單的色調)。那麼在這種情況下如何使畫布變暗一點?如何變暗畫布或畫布上繪製的圖像?

回答

1

假設圖像的寬度和高度已知,我可能會首先使用Image.getRGB來獲取圖像像素的ARGB值。

然後,我會縮放RGB值以使其變暗。與darken方法獲得

int[] darken(int[] argb, int percentage) { 
    int[] result = new int[argb.length]; 
    for (int i = 0; i <argb.length; i++) { 
     result[i] = darkenArgb(argb[i], percentage); 
    } 
    return result; 
} 

private int darkenArgb(int argb, int percentage) { 
    return darkenByte(argb, 3, 100) // keep alpha as-is 
      | darkenByte(argb, 2, percentage) 
      | darkenByte(argb, 1, percentage) 
      | darkenByte(argb, 0, percentage); 
} 

private int darkenByte(int argb, int index, int percentage) { 
    if (percentage < 0 || percentage > 100) { 
     throw new IllegalArgumentException("unexpected percentage: [" 
       + percentage + "]"); 
    } 
    if (index < 0 || index > 3) { 
     throw new IllegalArgumentException("unexpected index: [" + index + "]"); 
    } 
    int result = (argb >> index) & 0xFF; 
    result = result * percentage/100; 
    return result << index; 
} 

從陣列,變暗的圖像可能使用Image.createRGBImage

+0

應該是什麼在方法''darken' percentage'的值來進行? – pheromix

+0

@pheromix你必須通過實驗找出一個。我會嘗試至少25,50和75來測試它的感覺 – gnat