package com.partlyhuman.fx
{
    import flash.display.BitmapData;
    import flash.geom.Point;
    
    public class Gamma
    {
        protected var RLUT:Array;
        protected var GLUT:Array;
        protected var BLUT:Array;
        protected var origin:Point;
        
        public function Gamma(g:Number)
        {
            origin = new Point(0, 0);
            RLUT = new Array(256);
            GLUT = new Array(256);
            BLUT = new Array(256);
            
            for (var v:int = 0; v < 256; v++)
            {
                BLUT[v] = int(Math.pow(v / 256.0, g) * 256);
                GLUT[v] = BLUT[v] << 8;
                RLUT[v] = GLUT[v] << 8;
            }
        }
        
        public function applyGamma(tobmp:BitmapData, original:BitmapData):void
        {
            tobmp.paletteMap(original, original.rect, origin, RLUT, GLUT, BLUT, null);
        }
    }
}