2012-02-21 56 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