Understanding Color Transformation

by WLAD
♥0 | Line 168 | Modified 2013-05-02 23:49:09 | MIT License
play

ActionScript3 source code

/**
 * Copyright WLAD ( http://wonderfl.net/user/WLAD )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/61Ow
 */

package {import flash.display.Sprite;import flash.events.Event;[SWF(backgroundColor=0x84B7EE, width=465, height=456, frameRate=30)]public class FakeStage extends Sprite {
    public var bgColor:uint = 0x333333;            
public function FakeStage() {stage ? init() : addEventListener(Event.ADDED_TO_STAGE,init);} private function init(e:Event = null):void {removeEventListener(Event.ADDED_TO_STAGE,init);fillBg();addChild(new Main());stage.addEventListener(Event.RESIZE,fillBg);}private function fillBg(e:Event=null):void{graphics.clear();graphics.beginFill(bgColor);graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);graphics.endFill();}}}
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.display.*;
import flash.events.Event;
import flash.utils.getTimer;
import flash.geom.ColorTransform;
import net.hires.debug.Stats;
import com.bit101.components.*;


class Main extends Sprite
{  
    //http://blog.leeburrows.com/2010/09/bitmapdata-basics-1/
    
    private var cont:Sprite;
    
    private var stats:Stats;
    private var settings:Settings;

    public function Main()
    {
        //Ignore this.
        addEventListener(Event.ADDED_TO_STAGE,init);} private function init(e:Event):void {removeEventListener(Event.ADDED_TO_STAGE,init);        
        
        //Set FPS
        stage.frameRate = 30;
        
        //Init button, stats and container.
        initObjs();
        
        //Init BITMAP stuff
        initBitmap();
            
        //Main loop
        addEventListener(Event.ENTER_FRAME,function(e:Event):void
        {   
            drawBitmap();
        });    
    }    
    
    private function initObjs():void
    {
        cont = new Sprite();
        addChild(cont);
        
        settings = new Settings();
        settings.y = 465 - settings.height;
        
        new PushButton(this, 0,0, "+",function(e:Event):void
        {
            addChild(settings);            
        }).width = 30;
        
        stats = new Stats();
        addChild( stats ).x = 400;
    }

    




    private var px:Number,py:Number,sz:Number = 10;
    private var g:Graphics;
    private function drawGraphics():void
    {
        px = mouseX - sz * 3;
        py = mouseY - sz * 3;
    
        g = drawMe.graphics;          
        g.clear();
        

       g.beginFill(  0xFF0000  );        g.drawRect(px - sz * (  1.5  ),py - sz * (  1.5  ),sz,sz);        g.endFill();
       g.beginFill(  0x00FF00  );        g.drawRect(px - sz * (  .5   ),py - sz * (  1.5  ),sz,sz);        g.endFill();
       g.beginFill(  0x0000FF  );        g.drawRect(px - sz * (  -.5  ),py - sz * (  1.5  ),sz,sz);        g.endFill();
       
       

       g.beginFill(  0xFFFF00  );        g.drawRect(px - sz * (  1.5  ),py - sz * (  .5  ),sz,sz);        g.endFill();
       g.beginFill(  0x00FFFF  );        g.drawRect(px - sz * (  .5   ),py - sz * (  .5  ),sz,sz);        g.endFill();
       g.beginFill(  0xFF00FF  );        g.drawRect(px - sz * (  -.5  ),py - sz * (  .5  ),sz,sz);        g.endFill();

       g.beginFill(  Math.random() * 0xFFFFFF  );        
       g.drawRect(px - sz * (  1.5  ),py - sz * (  -.5  ),sz * 3,sz);        
       g.endFill();


       
       
    }

    
    
    public var bmp:Bitmap;
    public var bmpdata:BitmapData;
    public var drawMe:Sprite;

    private function initBitmap():void
    {
        bmpdata = new BitmapData(465, 465);
        bmp = new Bitmap(bmpdata);
        cont.addChild(bmp);
        drawMe = new Sprite();   
    }

    private function drawBitmap():void
    {
        drawGraphics();
 
        var result:Sprite = new Sprite();
        result.addChild(bmp);
        bmp.transform.colorTransform = new ColorTransform(
            Vars.redMulti,
            Vars.greenMulti, 
            Vars.blueMulti, 
            Vars.alphaMulti, 
            Vars.redOffset, 
            Vars.greenOffset, 
            Vars.blueOffset,
            Vars.alphaOffset
        );
        result.addChild(drawMe);
        bmpdata.draw(result);
        cont.addChild(bmp);
        bmp.transform.colorTransform = new ColorTransform();        
    }


}



class Vars
{
    public static var redOffset      :Number = 0.01;    
    public static var greenOffset    :Number = 0.00;    
    public static var blueOffset     :Number = 0.00;    
    public static var alphaOffset    :Number = 0.00;

    public static var redMulti      :Number = 0.99;    
    public static var greenMulti    :Number = 0.99;    
    public static var blueMulti     :Number = 0.99;    
    public static var alphaMulti    :Number = 1.00;
    
    
    public static const UIMaxValue:Number = 2;
}


///Change style
Style.BACKGROUND = 0x444444;
Style.BUTTON_FACE = 0x666666;
Style.INPUT_TEXT = 0xBBBBBB;
Style.LABEL_TEXT = 0xCCCCCC;
Style.PANEL = 0x666666;
Style.PROGRESS_BAR = 0x666666;






class Settings extends Window
{
    public function Settings()
    {
        super(null,0,0,"Settings");
        hasCloseButton = true;
        hasMinimizeButton = false;
        width = 465;
        height = 120;
        draggable = false;
           
        initComps();
    }

    private function initComps():void
    {
        var px:Number = 5,py:Number = 5;
        
        var h:HUISlider = new HUISlider(content,px,py,"Red Offset",function(e:Event):void
        {
            Vars.redOffset = (e.target as HUISlider).value;
        }); h.labelPrecision = 2; h.tick = 0.01; h.minimum = 0; h.maximum = Vars.UIMaxValue; h.value = Vars.redOffset;
        
        py += h.height + 5;

        h = new HUISlider(content,px,py,"Green Offset",function(e:Event):void
        {
            Vars.greenOffset = (e.target as HUISlider).value;
        }); h.labelPrecision = 2; h.tick = 0.01; h.minimum = 0; h.maximum = Vars.UIMaxValue; h.value = Vars.greenOffset;
        
        py += h.height + 5;

        h = new HUISlider(content,px,py,"Blue Offset",function(e:Event):void
        {
            Vars.blueOffset = (e.target as HUISlider).value;
        }); h.labelPrecision = 2; h.tick = 0.01; h.minimum = 0; h.maximum = Vars.UIMaxValue; h.value = Vars.blueOffset;
        
        py += h.height + 5;

        h = new HUISlider(content,px,py,"Alpha Offset",function(e:Event):void
        {
            Vars.alphaOffset = (e.target as HUISlider).value;
        }); h.labelPrecision = 2; h.tick = 0.01; h.minimum = 0; h.maximum = Vars.UIMaxValue; h.value = Vars.alphaOffset;
        
        px += h.width + 5;
        py = 5;
        
        h = new HUISlider(content,px,py,"Red Multiplier",function(e:Event):void
        {
            Vars.redMulti = (e.target as HUISlider).value;
        }); h.labelPrecision = 2; h.tick = 0.01; h.minimum = 0; h.maximum = Vars.UIMaxValue; h.value = Vars.redMulti;
        
        py += h.height + 5;
        

        h = new HUISlider(content,px,py,"Green Multiplier",function(e:Event):void
        {
            Vars.greenMulti = (e.target as HUISlider).value;
        }); h.labelPrecision = 2; h.tick = 0.01; h.minimum = 0; h.maximum = Vars.UIMaxValue; h.value = Vars.greenMulti;
        
        py += h.height + 5;
        
        

        h = new HUISlider(content,px,py,"Blue Multiplier",function(e:Event):void
        {
            Vars.blueMulti = (e.target as HUISlider).value;
        }); h.labelPrecision = 2; h.tick = 0.01; h.minimum = 0; h.maximum = Vars.UIMaxValue; h.value = Vars.blueMulti;

        py += h.height + 5;
        
        
//
        h = new HUISlider(content,px,py,"Alpha Multiplier",function(e:Event):void
        {
            Vars.alphaMulti = (e.target as HUISlider).value;
        }); h.labelPrecision = 2; h.tick = 0.01; h.minimum = 0; h.maximum = Vars.UIMaxValue; h.value = Vars.alphaMulti;

    }

    
    override protected function onClose(e:MouseEvent):void
    {
        
        parent.removeChild(this);
    }


    
}