0

我在网上找到了这个函数,我将它应用于两个位图的每个像素,用于混合:

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);
}

但结果是所有奇怪颜色的垃圾。我在位图操作方面没有太多经验,所以有人可以帮助我吗?

4

1 回答 1

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);
于 2012-02-21T14:48:48.937 回答