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