2012-02-21 35 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 2012-02-21 13:36:58

+0

谢谢,但我已经读过,我的位图已经在ARGB_8888模式。 – 2012-02-21 13:42:22

回答

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

它产生其中最高8位(阿尔法部分)被设置为成比例作为参数传递的百分比的值的结果INT 。例如,创建具有50%的α-口罩,叫

int newMask = setAlphaToInt(oldMask, 50.0f); 
+0

嗨,感谢您的答案,但它没有奏效。它给了我奇怪的颜色。但不要打扰它,我找到了适合我的解决方案。我只是用不透明度在原始图像上绘制生成的图像,然后保存结果画布。这并不美丽,但最终的结果是好的。 – 2012-02-22 17:15:23