2012-02-21 1 views
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))); 
} 

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

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

http://stackoverflow.com/questions/4605325/blending-pixels-from-two-bitmaps это может быть помочь полной – Triode

+0

Спасибо, но я уже прочитал, что мои растровые изображения уже находятся в режиме ARGB_8888. –

ответ

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); 
+0

Привет, спасибо за ответ, но это не сработало. Это дало мне странные цвета. Но не беспокойтесь, я нашел решение, которое работает для меня. Я просто рисую результирующее изображение поверх исходного изображения с непрозрачностью, а затем сохраняю полученный холст. Это не красиво, но конечный результат хорош. –