0

我正在尝试从具有透明度的 PNG 的 MovieClip 存储 BitmapData。当我copyPixels()将存储的 BitmapData 存储到舞台位图的 BitmapData 时,透明度已被替换为纯白色。

我已经在谷歌上搜索了一个多小时,并自己尝试了一些东西。

这是 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 中的透明度被替换为白色?

编辑:

这是构造函数中的两行代码:

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 属性控制将透明图像复制到另一个透明图像时是否使用 Alpha 通道。要使用 Alpha 通道数据复制像素,请将 mergeAlpha 属性设置为 true。默认情况下,mergeAlpha 属性为 false。

于 2012-06-15T19:39:49.663 回答