【问题标题】:How to mask image with another image in ActionScript 3.0如何在 ActionScript 3.0 中用另一个图像遮罩图像
【发布时间】:2011-02-26 09:35:06
【问题描述】:

我的问题是,我的用户使用 FileReference,我需要屏蔽它,然后将其发送到服务器。

我的问题是:我能够保留文件引用事件并且 将图像数据传输到我的画布中。我可以发送到服务器 掩蔽的结果。

但我无法屏蔽我的用户加载的图像 我的画布。

【问题讨论】:

    标签: actionscript-3 flex3 mask masking bitmask


    【解决方案1】:

    您只需将加载的位图添加到可屏蔽容器(例如 Sprite)。例如: 测试.as

    package {
    import flash.display.Graphics;
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.net.FileFilter;
    import flash.net.FileReference;
    
    public class Test extends Sprite {
    
        private var _fileReference:FileReference;
        private var _fileFilter:FileFilter;
        private var _loader:Loader;
        private var _imageContainer:Sprite;
        private var _mask:Sprite;
        private var _canvas:Sprite;
    
        public function Test() {
            addEventListener(Event.ADDED_TO_STAGE, addedToStageListener, false, 0, true);
        }
    
        private function addedToStageListener(event:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
    
            _fileReference = new FileReference();
            _fileReference.addEventListener(Event.SELECT, fileSelectedListener, false, 0, true);
            _fileReference.addEventListener(Event.COMPLETE, fileLoadCompleteListener, false, 0, true);
    
            _fileFilter = new FileFilter("Images", "*.jpg;*.gif;*.png");
    
            _loader = new Loader();
            _canvas = new Sprite();
    
            _mask = new Sprite();
            var maskGraphics:Graphics = _mask.graphics;
            maskGraphics.beginFill(0xFFFFFF);
            maskGraphics.drawCircle(50, 50, 50);
            maskGraphics.endFill();
    
            _imageContainer = new Sprite();
            _imageContainer.mask = _mask;
    
            _canvas.addChild(_imageContainer);
            _canvas.addChild(_mask);
    
            addChild(_canvas);
    
            stage.addEventListener(MouseEvent.CLICK, mouseClickListener, false ,0, true);
        }
    
        private function mouseClickListener(event:Event):void {
            _fileReference.browse([_fileFilter]);
        }
    
        private function fileSelectedListener(event:Event):void {
            _fileReference.load();
        }
    
        private function fileLoadCompleteListener(event:Event):void {
            _loader.loadBytes(event.target.data);
    
            while(_imageContainer.numChildren) {
                _imageContainer.removeChildAt(0);
            }
            _imageContainer.addChild(_loader);
        }
    }}
    

    【讨论】:

    • 非常感谢您的快速回复...您的示例对我来说非常有用,但是如果我有一个包含掩码信息的图像,例如 yfrog.com/5amaskblackp;如何将此图像与_mask集成?非常感谢尼古拉
    【解决方案2】:

    这会改变情况,但不会显着改变。查看修改后的解决方案:

    package {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.net.FileFilter;
    import flash.net.FileReference;
    
    public class Test extends Sprite {
    
        private var _fileReference:FileReference;
        private var _fileFilter:FileFilter;
        private var _imageLoader:Loader;
        private var _maskLoader:Loader;
        private var _canvas:Sprite;
    
        private var _imageLoaded:Boolean = false;
    
        public function Test() {
            addEventListener(Event.ADDED_TO_STAGE, addedToStageListener, false, 0, true);
        }
    
        private function addedToStageListener(event:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
    
            _fileReference = new FileReference();
            _fileReference.addEventListener(Event.SELECT, fileSelectedListener, false, 0, true);
            _fileReference.addEventListener(Event.COMPLETE, fileLoadCompleteListener, false, 0, true);
    
            _fileFilter = new FileFilter("Images", "*.jpg;*.gif;*.png");
    
            _imageLoader = new Loader();
            _imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoadCompleteListener, false, 0, true);
            _maskLoader = new Loader();
            _maskLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, maskLoadCompleteListener, false, 0, true);
    
            _canvas = new Sprite();
            addChild(_canvas);
    
            stage.addEventListener(MouseEvent.CLICK, mouseClickListener, false ,0, true);
        }
    
        private function mouseClickListener(event:Event):void {
            _fileReference.browse([_fileFilter]);
        }
    
        private function fileSelectedListener(event:Event):void {
            _fileReference.load();
        }
    
        private function fileLoadCompleteListener(event:Event):void {
            if (!_imageLoaded) {
                _imageLoader.loadBytes(event.target.data);
            } else {
                _maskLoader.loadBytes(event.target.data);
            }
        }
    
        private function imageLoadCompleteListener(event:Event):void {
            _imageLoaded = true;
        }
    
        private function maskLoadCompleteListener(event:Event):void {
            var imageBitmap:Bitmap = _imageLoader.content as Bitmap;
            var maskBitmap:Bitmap = _maskLoader.content as Bitmap;
    
            if (imageBitmap && maskBitmap) {
                var imageBitmapData:BitmapData = imageBitmap.bitmapData;
                var maskBitmapData:BitmapData = maskBitmap.bitmapData;
    
                var boundRectange:Rectangle = new Rectangle(0, 0, maskBitmap.width, maskBitmap.height);
                var destinationPoint:Point = new Point(0, 0);
    
                var finalBitmapData:BitmapData = new BitmapData(maskBitmap.width, maskBitmap.height);
                finalBitmapData.copyPixels(imageBitmapData, boundRectange, destinationPoint, maskBitmapData, destinationPoint);
                var finalBitmap:Bitmap = new Bitmap(finalBitmapData);
    
                while(_canvas.numChildren) {
                    _canvas.removeChildAt(0);
                }
                _canvas.addChild(finalBitmap);
            }
        }
    }}
    

    首先点击舞台允许您选择蒙版图像。第二次单击允许您选择包含遮罩信息的图像(例如具有透明度的 png 文件)。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-07
      • 2018-05-29
      • 2016-01-07
      • 2022-10-23
      • 2011-07-04
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      相关资源
      最近更新 更多