package sketchbook.colors
{
import flash.display.BitmapData;
import flash.display.Bitmap;
import sketchbook.colors.*
/**
* Colorオブジェクトを配列として管理するクラス
*
*
24ビット数値の配列、Colorオブジェクトの配列、Bitmap, BitmapDataから一連のカラーオブジェクトを生成できる
* TODO: 明度順、彩度順、色相順、特定の色との近似色準といった具合にソート可能にすること!!
*/
public class Palette
{
protected var _colors:Array
/**
* ソースオブジェクトから色情報を抽出してパレットを作りだします。
*
* 色情報ソースとしては以下のものが使用できます。
*
*
* - 24ビット数値(0xffffff等)の配列
* - ColorSBオブジェクトの配列
* - Bitmapオブジェクト
* - BitmapDataオブジェクト
*
*
* @param sourceObj パレットの色情報ソースとなるオブジェクト
*/
public function Palette(sourceObj:Object)
{
initPalette(sourceObj)
}
/**
* パレットからランダムにColorSBオブジェクトを返します。
*
* @return ColorSBオブジェクト
*/
public function getRandom():ColorSB
{
return _colors[ Math.floor( Math.random()*_colors.length)]
}
/**
* パレットからランダムに色値を返します。
*
* @return 色の数値
*/
public function getRandomValue():uint
{
return getRandom().value
}
/**
* パレット内の色の個数
*/
public function get count():uint
{
return _colors.length
}
/**
* ColorSBオブジェクトを格納した配列
*/
public function get colors():Array
{
return _colors.concat()
}
/**
* 静的関数によるPaletteのファクトリー
*/
//2色のグラデーションからパレットを作る
public static function createFrom2Color( col0:ColorSB, col1:ColorSB, splitNum:int = 16 )
{
//not yet implemented
}
/*
---------------------------------------------------------------------------
internal use only
---------------------------------------------------------------------------
*/
//渡されたデータ [Number, Number...] or [Color, Color...] or Bitmap or BitmapData からパレットを作成
protected function initPalette(source:Object):void
{
_colors = new Array()
if(source is Array){
parseArray(source as Array)
}else if(source is Bitmap){
var bmd:BitmapData = Bitmap(source).bitmapData
parseBitmapData(bmd)
}else if(source is BitmapData){
parseBitmapData(source as BitmapData)
}
}
//色の値からパレットを作る
protected function parseArray(ar:Array):void
{
var imax:int = ar.length
for(var i:int=0; i