1
我導出了Canvas
類,其中在paint
方法中我繪製了一個Image
。當點擊一個Command
時,我想在畫布中畫一個矩形和一個矩形內的字符串,並且圖像仍然會顯示在矩形後面,所以我想讓圖像變暗一點,因爲我想讓視覺效果像一個顯示LWUIT對話框(隱藏表單的色調)。那麼在這種情況下如何使畫布變暗一點?如何變暗畫布或畫布上繪製的圖像?
我導出了Canvas
類,其中在paint
方法中我繪製了一個Image
。當點擊一個Command
時,我想在畫布中畫一個矩形和一個矩形內的字符串,並且圖像仍然會顯示在矩形後面,所以我想讓圖像變暗一點,因爲我想讓視覺效果像一個顯示LWUIT對話框(隱藏表單的色調)。那麼在這種情況下如何使畫布變暗一點?如何變暗畫布或畫布上繪製的圖像?
假設圖像的寬度和高度已知,我可能會首先使用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
應該是什麼在方法''darken' percentage'的值來進行? – pheromix
@pheromix你必須通過實驗找出一個。我會嘗試至少25,50和75來測試它的感覺 – gnat