チェンジセット 160

差分発生行の前後
無視リスト:
コミット日時:
2007/12/19 14:15:21 (1 年前)
コミッタ:
muraken
ログメッセージ:

--

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as3/ColorPickUper/src/biz/muraken/ColorPickUper.as

    r156 r160  
    2929* @author               むらけん[http://www.muraken.biz/] 
    3030* @since                Flash Player 9 (ActionScript 3.0) 
    31 * @version              0.1 
     31* @version              0.2 
    3232* @history              2007.12.17      作成 
     33*                               2007.12.19      アプローチを若干修正 
    3334*/ 
    3435 
    35 package
     36package biz.muraken
    3637        import flash.display.BitmapData; 
    3738 
    38         public class biz.muraken.ColorPickUper{ 
     39        public class ColorPickUper{ 
    3940 
    4041                //___________________________________________________________________________________________________________________________________ 
     
    4950                        else if(quality == 2)setNum = 32; 
    5051                        else if(quality == 3)setNum = 64; 
     52                        else setNum = 32; 
    5153                } 
    5254 
     
    5860                        var coeX:Number = _bmd.width/(setNum+1); 
    5961                        var coeY:Number = _bmd.height/(setNum+1); 
    60                         for(var i:int = 1;i<setNum;i++){ 
    61                                 for(var j:int = 1;j<setNum;j++){ 
    62                                         _array.push(_bmd.getPixel(coeX*i,coeY*j)); 
    63                                 } 
    64                         } 
    6562                        var red:uint; 
    6663                        var green:uint; 
    6764                        var blue:uint; 
    68                         for(var k:int=0;k<_array.length;k++){ 
    69                                 red = _array[k] >> 20; 
    70                                 green = _array[k] >> 12 & 0xF; 
    71                                 blue = _array[k] >> 4 & 0xF; 
    72                                 red = red<<4 | red; 
    73                                 green = green<<4 | green; 
    74                                 blue = blue<<4 | blue; 
    75                                 _array[k] = red <<16 | green<<8 | blue; 
    76                         } 
    77                         return arrayReduce(arrayUnique(_array)); 
    78                 } 
    79  
    80                 private function arrayUnique(_array:Array):Array{ 
    81                         var fix_array:Array = new Array(); 
    82                         var flag:Boolean; 
    83                         var _obj:Object; 
    84                         for(var i:uint=0,len:uint=_array.length;i<len;i++){ 
    85                                 flag = true; 
    86                                 for(var j:uint=0,len2:uint=fix_array.length;j<len2;j++){ 
    87                                         _obj = fix_array[j]; 
    88                                         if(_obj.color==_array[i]){ 
    89                                                 flag = false; 
    90                                                 _obj.cnt++; 
     65                        var _color16:uint 
     66                        var _color8:uint; 
     67                        var _obj:Object = new Object(); 
     68                        for(var i:int = 1;i<setNum;i++){ 
     69                                for(var j:int = 1;j<setNum;j++){ 
     70                                        _color16 = _bmd.getPixel(coeX*i,coeY*j); 
     71                                        red = ((_color16 >> 20) << 4) | (_color16 >> 20); 
     72                                        green = ((_color16 >> 12 & 0xF) << 4) | (_color16 >> 12 & 0xF); 
     73                                        blue = ((_color16 >> 4 & 0xF) << 4) | (_color16 >> 4 & 0xF); 
     74                                        _color8 = red <<16 | green<<8 | blue; 
     75                                        if(_obj[_color8]==undefined){ 
     76                                                _obj[_color8] = 1; 
     77                                                _array.push({color:_color8, cnt:_obj[_color8]}) 
     78                                        }else{ 
     79                                                ++_obj[_color8]; 
    9180                                        } 
    9281                                } 
    93                                 if(flag)fix_array.push({cnt:1,color:_array[i]}); 
    9482                        } 
    95                         fix_array.sortOn("cnt", Array.DESCENDING | Array.NUMERIC); 
    96                         return fix_array
     83                        _array.sortOn("cnt", Array.DESCENDING | Array.NUMERIC); 
     84                        return arrayReduce(_array)
    9785                } 
    9886 
     
    10997                                        _cnt += Math.abs((_obj.color >> 12 & 0xF) - (fix_array[j] >> 12 & 0xF)); 
    11098                                        _cnt += Math.abs((_obj.color >> 4 & 0xF) - (fix_array[j]>>4 & 0xF)); 
    111                                         if(_cnt<10)flag = false; 
     99                                        if(_cnt<10){ 
     100                                                flag = false; 
     101                                                break; 
     102                                        } 
    112103                                } 
    113104                                if(flag)fix_array.push(_obj.color);