Java 混合像素函数的Alpha

Java 混合像素函数的Alpha,java,android,colors,color-blending,Java,Android,Colors,Color Blending,我在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

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

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

在调用
硬光
方法之前,将此函数应用于您的掩码:

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

这可能会有帮助,谢谢,但是我已经读到了,我的位图已经在ARGB_8888模式下了。嗨,谢谢你的回答,但是它不起作用。它给了我奇怪的颜色。但不用担心,我找到了一个适合我的解决方案。我只是用不透明度在原始图像上绘制结果图像,然后保存结果画布。这并不漂亮,但最终的结果是好的。
    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 newMask = setAlphaToInt(oldMask, 50.0f);