as3 抠图、选取透明区域

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);
      }
     }
    }   
   }
}
}

原图

最终效果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值