2009-03-23 8 views
0

この機能の目的は、背景を透明に変換してからビットマップデータを返すことですが、動作しないようです。コードは次のとおりです。アクションスクリプトを透明な背景に変換する

private function transparentConverter(source:BitmapData, threshold:Number = 0.1):BitmapData 
     { 
      var bitmapData:BitmapData = new BitmapData(source.width, source.height, true, 0x00000000 ); 
      bitmapData.lock(); 
      var color:uint = source.getPixel(0, 0); 

      var x:uint, y:uint; 
      for (y = 0; y < source.height; y++) 
      { 
       for (x = 0; x < source.width; x++) 
       { 
        var c1:uint = source.getPixel(x, y); 
        var c2:uint = color; 
        var rx:uint = Math.abs(((c1 & 0xff0000) >> 16) - ((c2 & 0xff0000) >> 16)); 
        var gx:uint = Math.abs(((c1 & 0xff00) >> 8) - ((c2 & 0xff00) >> 8)); 
        var bx:uint = Math.abs((c1 & 0xff) - (c2 & 0xff)); 

        var dist:uint = Math.sqrt(rx*rx + gx*gx + bx*bx); 

        if (dist <= threshold) 
        { 
         bitmapData.setPixel32(x, y, 0x00000000); 
        }else 
         { 
          bitmapData.setPixel32(x, y, c1); 
         } 
       } 
      } 
      bitmapData.unlock(); 
      return bitmapData; 
     } 

アドバイスをしてください。

答えて

0

Theoは、機能は動作するようですが、少し時間がかかりますが、ビットマップデータは返されません。

は、私は、次のコードでbitmpadataを受け取る:

bitmapData = transparentConverter(bitmapData); 
var bitmap:Bitmap = new Bitmap(bitmapData); 
image1.source = bitmap; 

画像は表示されません。

また、私は(c1)をトレースすることができ、長いデータリストを取得できます。 お返事ありがとうございます。

0

あなたはこれを試すことができます:

// This bitmapData should be defined for real, wherever you get that from ... 
var source:BitmapData; 

if(source == null) 
    trace("The source cannot be empty"); 

// Here you get the transformed BitmapData 
var destination:bitmapData = transparentConverter(source); 

// You apply it to a Bitmap in order to visualize it 
var viewBitmap:Bitmap = new Bitmap(destination); 

// You add the Bitmap to the stage so you can see it 
addChild(viewBitmap); 
0

テオ、あなたの努力に感謝。私は問題は機能が実行するには時間がかかりすぎると思う。あなたのスクリプトを試した後、警告メッセージが出ます。プログラムの実行には15秒以上かかり、実行を停止するように指示しているという。

私は関数がOKであるべきだと思いますが、おそらく実用的ではないかもしれません。

テオ、時間とアドバイスをもう一度お寄せいただきありがとうございます。

質問を閉じることができると思います。