Hi;
I'm trying to tweak a script I found online to work for my application. The 
problem I am having is to make a certain part of the bitmap that is created by 
code transparent...but only a certain part of it. The code has the following:

            _fire = new BitmapData(865, 92, false, 0xffffff);

Note
 the alpha flag must be set to false, which is the source of my problem,
 or nothing prints to screen at all. I need to make certain pixels 
transparent. _fire is added to the stage and then called thus:

            _fire.paletteMap(_grey, _grey.rect, ZERO_POINT, _redArray, 
_greenArray, _blueArray, _alphaArray);

at the end of the script. The colors for the arrays are created thusly:

        private function _createPalette(idx:int):void {
            _redArray = [];
            _greenArray = [];
            _blueArray = [];
            _alphaArray = [];
            for (var i:int = 0; i < 256; i++) {
                var gp:int = new int();
                gp = _fireColor.getPixel(i, 0);
                if (gp < 1050112)
                {
                    _redArray.push(255);
                    _alphaArray.push(255);
                } else {
                    _redArray.push(gp);
                    _alphaArray.push(0);
                }
                _greenArray.push(0);
                _blueArray.push(0);
            }
        }

I
 added that if clause to capture when the color is black because that's 
where I need to make it transparent. The problem is that where I need it
 to be transparent, it's blue (why blue I don't know). Is there any way 
to make it transparent? The entire code follows.
TIA,
George



package {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.BlendMode;
    import flash.display.DisplayObject;
    import flash.display.Loader;
    import flash.display.LoaderInfo;
    import flash.display.Sprite;
    import flash.display.StageQuality;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.filters.ColorMatrixFilter;
    import flash.filters.ConvolutionFilter;
    import flash.geom.ColorTransform;
    import flash.geom.Point;
    import flash.system.LoaderContext;
    import flash.net.SharedObject;
    import flash.net.URLRequest;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    
    [SWF(width=465, height=92, backgroundColor=0xffffff, frameRate=30)]

    public class Fire extends Sprite {
        
        private static const ZERO_POINT:Point = new Point();
        
        private var _fireColor:BitmapData;
        private var _currentFireColor:int;
        
        private var _canvas:Sprite;
        private var _grey:BitmapData;
        private var _spread:ConvolutionFilter;
        private var _cooling:BitmapData;
        private var _color:ColorMatrixFilter;
        private var _offset:Array;
        private var _fire:BitmapData;
        private var _redArray:Array;
        private var _zeroArray:Array;
        private var _greenArray:Array;
        private var _blueArray:Array;
        private var _alphaArray:Array;
        
        public function Fire() {
//            stage.scaleMode = StageScaleMode.NO_SCALE;
//            stage.quality = StageQuality.LOW;
            var loader:Loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, 
_onLoaded);
            loader.load(new URLRequest('images/fire-color.png'), new 
LoaderContext(true));
        }
        
        private function _onLoaded(e:Event):void {
            _fireColor = Bitmap(LoaderInfo(e.target).loader.content).bitmapData;
            
            _canvas = new Sprite();
            _canvas.graphics.beginFill(0xffffff, 0);
            _canvas.graphics.drawRect(0, 0, 865, 465);
            _canvas.graphics.endFill();
            _canvas.addChild(_createEmitter());
            
            _grey = new BitmapData(865, 465, false, 0xffffff);
            _spread = new ConvolutionFilter(3, 3, [0, 1, 0,  1, 1, 1,  0, 1, 
0], 5);
            _cooling = new BitmapData(865, 465, false, 0xffffff);
            _offset = [new Point(), new Point()];
            _fire = new BitmapData(865, 92, false, 0xffffff);
            addChild(new Bitmap(_fire));
            
            _createCooling(0.16);
            _createPalette(_currentFireColor = 0);
            
            addEventListener(Event.ENTER_FRAME, _update);
//            stage.addEventListener(MouseEvent.CLICK, _onClick);
        }
        
        private function _onClick(e:MouseEvent):void {
            if (++_currentFireColor == int(_fireColor.height / 32)) {
                _currentFireColor = 0;
            }
            _createPalette(_currentFireColor);
        }
        
        private function _createEmitter():DisplayObject {
            var tf:TextField = new TextField();
            tf.selectable = false;
            tf.autoSize = TextFieldAutoSize.LEFT;
            tf.defaultTextFormat = new TextFormat('Verdana', 80, 0xffffff, 
true);
            tf.text = '__________________________________________';
            tf.x = (465 - tf.width) / 2;
            tf.y = 0;
//            tf.y = (465 - tf.height) / 2;
            return tf;
        }
        
        private function _createCooling(a:Number):void {
            _color = new ColorMatrixFilter([
                a, 0, 0, 0, 0,
                0, a, 0, 0, 0,
                0, 0, a, 0, 0,
                0, 0, 0, 1, 0
            ]);
        }
        
        private function _createPalette(idx:int):void {
            _redArray = [];
            _greenArray = [];
            _blueArray = [];
            _alphaArray = [];
            for (var i:int = 0; i < 256; i++) {
                var gp:int = new int();
                gp = _fireColor.getPixel(i, 0);
                if (gp < 1050112)
                {
                    _redArray.push(255);
                    _alphaArray.push(255);
                    _greenArray.push(255);
                    _blueArray.push(255);
                } else {
                    _redArray.push(gp);
                    _alphaArray.push(0);
                    _greenArray.push(0);
                    _blueArray.push(0);
                }
            }
        }
        
        private function _update(e:Event):void {
            _grey.draw(_canvas);
            _grey.applyFilter(_grey, _grey.rect, ZERO_POINT, _spread);
            _cooling.perlinNoise(50, 50, 2, 982374, false, false, 0, true, 
_offset);
            _offset[0].x += 2.0;
            _offset[1].y += 2.0;
            _cooling.applyFilter(_cooling, _cooling.rect, ZERO_POINT, _color);
            _grey.draw(_cooling, null, null, BlendMode.SUBTRACT);
            _grey.scroll(0, -3);
            _fire.paletteMap(_grey, _grey.rect, ZERO_POINT, _redArray, 
_greenArray, _blueArray, _alphaArray);
           }
    }
}
                                          
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to