プロジェクトで使用する必要がある jpg ファイルがたくさんありますが、何らかの理由で変更することはできません。各ファイルは類似(手書き)で、白の BG に黒のペンです。ただし、フラッシュ プロジェクトでこれらのアセットを白以外の背景に対して使用する必要があるため、getPixel と setPixel32 を使用して背景を取り除くためにクライアント側の処理を実行しようとしています。
私が現在使用しているコードは線形比較を使用していますが、機能している間は、グレーの色合いがミックスで失われているため、結果は予想を下回っています。パラメータを微調整して適切に見えるようにするだけでなく、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;
}