Альфа на смешанной функции пикселей - PullRequest
0 голосов
/ 21 февраля 2012

В сети я нашел эту функцию, которую применяю к каждому пикселю двух растровых изображений для наложения:

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

Но мне также нужно отрегулировать интенсивность маски смешивания, поэтому мне нужно применить к ней альфу, но я не знаю, как это сделать.

Я пробовал этот метод на 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);
}

Но результатом стал мусор со всеми странными цветами. У меня нет большого опыта в манипулировании растровыми изображениями, так может кто-нибудь мне помочь?

1 Ответ

1 голос
/ 21 февраля 2012

Примените эту функцию к маске, прежде чем вызывать метод 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 бит (альфа-часть) установлены в значение, пропорциональное процентупередается в качестве параметра.Например, чтобы создать маску с 50% альфа, позвоните

int newMask = setAlphaToInt(oldMask, 50.0f);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...