2011-11-30 182 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