2010-11-12 52 views
0

我有一大堆需要在項目中使用的jpg文件,出於某種原因不能更改。每個文件都是相似的(手寫),白色BG上的黑色筆。不過,我需要在我的Flash項目中針對非白色背景使用這些資源,因此我正在嘗試執行一些客戶端處理以使用getPixel和setPixel32來消除背景。位圖轉換 - 從B&W源創建透明+黑色圖像

我目前正在使用的代碼使用線性比較,並且它可以正常工作,但結果比預期的要少,因爲混合中的灰色陰影正在消失。不僅僅是調整我的參數以使事物看起來合適,我感覺我的計算RGBa值的方法很弱。

任何人都可以推薦比我在下面使用更好的解決方案嗎?非常感激!

private function transparify(data:BitmapData) : Bitmap { 

    // Create a new BitmapData with transparency to return 
    var newData:BitmapData = new BitmapData(data.width, data.height, true); 
    var orig_color:uint; 
    var alpha:Number; 
    var percent:Number; 

    // Iterate through each pixel using nested for loop 
    for(var x:int = 0; x < data.width; x++){ 
     for (var y:int = 0; y < data.height; y++){ 

      orig_color = data.getPixel(x,y); 

      // percent is the opacity percentage, white should be 0, 
      // black would be 1, greys somewhere in the middle 
      percent = (0xFFFFFF - orig_color)/0xFFFFFF; 

      // To get the alpha value, I multiply 256 possible values by 
      // my percentage, which gets multiplied by 0xFFFFFF to fit in the right 
      // value for the alpha channel 
      alpha = Math.round((percent)*256)*0xFFFFFF; 

// Adding the alpha value to the original color should give me the same 
// color with an alpha channel added 
      var newCol = orig_color+alpha; 
      newData.setPixel32(x,y,newCol); 
     } 
    } 

    var newImg:Bitmap = new Bitmap(newData); 
    return newImg; 
} 

回答

0

由於它是白色背景,blendMode可能會給您一個更好的結果。

+0

BlendMode.MULTIPLY完成了我想要的操作。 不幸的是,在修改上面的代碼以產生完全相同的結果後,我發現了這一點。訣竅是使用按位運算符而不是上面使用的。這就是說,我接受你的答案,因爲過濾器可能比掃描每個像素和爲每個圖像創建一個新的位圖要少。 – Conor 2010-11-12 20:13:36

相關問題