Bitmap :位图对象,对所有加载的外部图片均可以转换成位图对象再加载显示
BitmapData :对位图的所有像素的信息以数据的形式保存在BitmapData 对象中,其中构造方法第三个参数transparent 用来控制位图的透明度,默认为true ,表示支持各个像素有不同透明值
import flash.display.Shape;
import flash.display.Sprite;
var bt: BitmapData = new BitmapData (200,100,false,0xcccccc);
var bit: Bitmap = new Bitmap (bt);
addChild(bit);
trace(bt. getPixel (10,10).toString(16)); //cccccc
trace(bt. getPixel32 (10,10).toString(16)); //ffcccccc 其中 ff 表透明度最大
其中 getPixel32 前边多的两位是 alpha 通道信息
同样 getPixel,getPixel32, 分别对应 setPixel() 和 getPixel32();
------------------------------------------------------------
利用这些方法就能实现抠图和判断透明区域了:代码如下:
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
import flash.display.LoaderInfo;
public class Main extends Sprite {
private var a:Loader = new Loader();
public function Main()
{
a.load(new URLRequest("10020601.png"));
a.contentLoaderInfo.addEventListener(Event.COMPLETE, an);
}
private function an(evt:Event):void
{
var hh:BitmapData = new BitmapData(a.content.width,a.content.height,false,0xcccccc);
var kk:Bitmap = new Bitmap(hh);
addChild(kk);
kk.x = 200;
var tu2:Bitmap=Bitmap(a.content as Bitmap);
addChild(tu2);
var yan:uint;
for (var i:uint = 0; i<tu2.width; i++)
{
for (var j:uint = 0; j<tu2.height; j++)
{
yan = (a.content as Bitmap).bitmapData. getPixel32 (i, j);
if (yan<=0) // 要抠取的颜色
{
tu2.bitmapData. setPixel32 (i,j,0xffff0000);
hh. setPixel (i,j,0xff0000);
}
}
}
}
}
}
原图
最终效果