zoukankan      html  css  js  c++  java
  • Alpha mask using Actionscript 3.0

    Have you ever tried to create an alpha mask using Actionscript 3.0?
    The thing is reachable with the method copyChannel of the BitmapData class.

    1. Load an external image
    2. Create a new instance of BitmapData (bitmap_data) and assign it to bitmapData property of the external bitmap
    3. Create a new instance of BitmapData (bitmap_data_copy) with same size of external bitmap
    4. Copy the pixels of external bitmap in the new instance bitmap_data_copy
    5. Use the dispose method on bitmap_data to free memory
    6. Create a mask form using a Shape
    7. Create a new instance of BitmapData (bitmap_data_shape) the same size of external image and use draw method over shape
    8. bitmap_data_copy uses the method copyChannel on bitmap_data_shape
    9. Give bitmap_data_copy to property bitmapData of external image

    package
    {
        import flash.display.*;
        import flash.events.*;
        import flash.net.*;
        import flash.geom.*;
        import flash.filters.*;
    
        public class Main extends MovieClip
        {
            private var loaded_bitmap:Bitmap;
            private var bitmap_data:BitmapData;
            private var bitmap_data_copy:BitmapData;
            private var bitmap_data_shape:BitmapData;
    
            private var shape:Shape;
    
            public function Main()
            {
                addEventListener(Event.ADDED_TO_STAGE,init);
                addEventListener(Event.REMOVED_FROM_STAGE,destroy);
            }
    
            private function init(evt:Event):void
            {
                removeEventListener(Event.ADDED_TO_STAGE,init);
    
                loadImage();
            }
    
            private function loadImage():void
            {
                var request:URLRequest=new URLRequest("tiger.jpg");
                var loader:Loader=new Loader();
                loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onImageLoaded);
                loader.load(request);
            }
    
            private function onImageLoaded(evt:Event):void
            {
                evt.target.removeEventListener(Event.COMPLETE,onImageLoaded);
    
                loaded_bitmap=evt.target.loader.content as Bitmap;
    
                createAlphaMask();
            }
    
            private function createAlphaMask():void
            {
                bitmap_data=loaded_bitmap.bitmapData;
                var w:Number=bitmap_data.width;
                var h:Number=bitmap_data.height;
    
                bitmap_data_copy=new BitmapData(w,h,true,0x00FFFFFF);
                bitmap_data_copy.copyPixels(bitmap_data,bitmap_data.rect,new Point());
                bitmap_data.dispose();
    
                shape=createMask(w,h);
                bitmap_data_shape=new BitmapData(w,h,true,0x00FFFFFF);
                bitmap_data_shape.draw(shape);
    
                bitmap_data_copy.copyChannel(bitmap_data_shape,bitmap_data_shape.rect,new Point(),BitmapDataChannel.ALPHA,BitmapDataChannel.ALPHA);
                loaded_bitmap.bitmapData=bitmap_data_copy;
                addChild(loaded_bitmap);
            }
    
            private function createMask(w:Number,h:Number):Shape
            {
                var new_shape:Shape=new Shape();
                new_shape.graphics.beginFill(0xFFFFFF);
                new_shape.graphics.drawEllipse(50,50,w-100,h-100);
                new_shape.graphics.endFill();
    
                var blur_filter:BlurFilter=new BlurFilter(50,50,BitmapFilterQuality.HIGH);
                new_shape.filters=[blur_filter];
                addChild(new_shape);
    
                return new_shape;
            }
    
            private function destroy(evt:Event):void
            {
                removeEventListener(Event.REMOVED_FROM_STAGE,destroy);
    
                bitmap_data_copy.dispose();
                bitmap_data_shape.dispose();
    
                removeChild(loaded_bitmap);
                removeChild(shape);
    
                loaded_bitmap=null;
                shape=null;
            }
        }
    }
    

  • 相关阅读:
    [Erlang 0106] Erlang实现Apple Push Notifications消息推送
    一场推理的盛宴
    [Erlang 0105] Erlang Resources 小站 2013年1月~6月资讯合集
    [Erlang 0104] 当Erlang遇到Solr
    [Erlang 0103] Erlang Resources 资讯小站
    history.go(-1)和History.back()的区别
    [Java代码] Java用pinyin4j根据汉语获取各种格式和需求的拼音
    spring中context:property-placeholder/元素
    Java中的异常处理:何时抛出异常,何时捕获异常?
    用Jersey构建RESTful服务1--HelloWorld
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/1817236.html
Copyright © 2011-2022 走看看