Функция альфа на смешанном пикселе
Я нашел эту функцию в Интернете, которую я применяю к каждому пикселю двух растровых изображений для смешивания:
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 ответ
Примените эту функцию к маске перед вызовом 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);