我在Web上发现了这个函数,我在两个位图的每个像素上应用,用于混合:
private static int hardlight(int in1, int in2) {
float image = (float)in2;
float mask = (float)in1;
return ((int)((image < 128) ? (2 * mask * image / 255):(255 - 2 * (255 - mask) * (255 - image) / 255)));
}
但我还需要调整混合蒙版的强度,所以我需要对它应用alpha,但我不知道如何去做。
我在http://www.pegtop.net/delphi/articles/blendmodes/opacity.htm上尝试了这个方法,我将其翻译成Java:
private static int opacity(int a, int b, float o) {
return (int) (o * hardlight(a,b) + (255 - o) * a);
}
但结果是垃圾与所有奇怪的颜色。我在位图操作方面没有太多经验,所以有人可以帮助我吗?
答案 0 :(得分:1)
在调用hardlight
方法之前将此函数应用于蒙版:
private static int setAlphaToInt(int i, float percentage){
if(percentage < 0 || percentage > 100.0f){
throw new IllegalArgumentException();
}
int desiredAlpha = (int) (((float)0xff * percentage)/100.0f);
desiredAlpha = desiredAlpha << 24;
return ((i & 0x00ffffff) | desiredAlpha);
}
它产生一个结果int,其中最高的8位(alpha部分)被设置为与作为参数传递的百分比成比例的值。例如,要创建一个50%alpha的掩码,请调用
int newMask = setAlphaToInt(oldMask, 50.0f);