0

透明度のある PNG である MovieClip から BitmapData を保存しようとしています。保存された BitmapDataをcopyPixels()ステージ ビットマップの BitmapData に渡すと、透明度が白一色に置き換えられました。

私はこれを1時間以上グーグルで検索し、自分でいくつかのことを試しています。

BitmapData 格納コードは次のとおりです。

//for all block types
for(var block_type_properties in this.block_types)
{


    //block_types[i][3] = bitmapdata
    this.block_types[block_type_properties].push(new BitmapData(this.block_size,this.block_size,true,0x000000));

    //block_types[i][4] = scale 
    this.block_types[block_type_properties].push(new Number(this.block_size/ this.block_types[block_type_properties][2].width));

    //block_types[i][5] = matrix
    this.block_types[block_type_properties].push(this.block_types[block_type_properties][2].transform.matrix);

    //scale the matrix
    this.block_types[block_type_properties][5].scale(this.block_types[block_type_properties][4],this.block_types[block_type_properties][4]);

    //apply the matrix to the movieclip
    this.block_types[block_type_properties][2].transform.matrix = this.block_types[block_type_properties][5];

    //draw the scaled movieclip into the bitmapdata
    this.block_types[block_type_properties][3].draw(this.block_types[block_type_properties][2],this.block_types[block_type_properties][5]);


}

実際にピクセルをステージのビットマップに貼り付ける部分は次のとおりです。

this.stage_background_bitmap_data.copyPixels(this.block_types[1][3],new Rectangle(0,0,this.block_size,this.block_size),new Point(blocks_array[block_count]['block'].x,blocks_array[block_count]['block'].y));

PNGの透明度が白に置き換えられている理由を知っている人はいますか?

編集:

これらは、コンストラクターからの 2 行のコードです。

this.stage_background_bitmap_data = new BitmapData(this.level_width,this.level_height,true,0x00000000);         
this.stage_background_bitmap = new Bitmap(this.stage_background_bitmap_data);

マトリックスのスケーリングが問題になることを除外しました。私はそれを取り除きましたが、透明度や透明度の欠如に影響はありませんでした.

4

1 に答える 1

4

パラメータを指定しmergeAlphaます。のドキュメントからBitmapData.copyPixels()

mergeAlpha プロパティは、透明なイメージを別の透明なイメージにコピーするときにアルファ チャネルを使用するかどうかを制御します。ピクセルをアルファ チャネル データと共にコピーするには、mergeAlpha プロパティを true に設定します。デフォルトでは、mergeAlpha プロパティは false です。

于 2012-06-15T19:39:49.663 に答える