Forked from: tkinjo's 色相環 diff:21 forked from: 色相環 色相環 @author tkinjo tkinjo forked:1favorite:2lines:67license : MIT License modified : 2009-10-30 01:14:11 Embed Tweet // forked from tkinjo's 色相環 // forked from tkinjo's 色相 package { import flash.display.*; import flash.events.*; import flash.geom.*; [SWF(width="465", height="465", backgroundColor="0xffffff", frameRate="60")] /** * 色相環 * * @author tkinjo */ public class Main extends Sprite { private var stageWidth:Number = stage.stageWidth; private var stageHeight:Number = stage.stageHeight; private var stageCenter:Point = new Point( stageWidth / 2, stageHeight / 2 ); public function Main() { var bitmapData:BitmapData = new BitmapData( stageWidth, stageHeight, false ); bitmapData.lock(); for ( var i:int = 0; i < stageWidth; i++ ) { for ( var j:int = 0; j < stageHeight; j++ ) { bitmapData.setPixel( i, j, getColor( new Point( i, j ) ) ); } } bitmapData.unlock(); var bitmap:Bitmap = new Bitmap( bitmapData ); bitmap.cacheAsBitmap = true; addChild( bitmap ); var mask:Sprite = new Sprite(); mask.graphics.beginFill( 0xffffff ); mask.graphics.drawCircle( stageCenter.x, stageCenter.y, stageCenter.x ); mask.graphics.drawCircle( stageCenter.x, stageCenter.y, stageCenter.x - 50 ); mask.graphics.endFill(); mask.cacheAsBitmap = true; addChild( mask ); bitmap.mask = mask; } private function getColor( point:Point ):uint { var pointFromStageCenter:Point = point.subtract( stageCenter ); var pointBearingFromStageCenter:Number = Math.atan2( pointFromStageCenter.y, pointFromStageCenter.x ) * 180 / Math.PI; if ( pointBearingFromStageCenter < 0 ) pointBearingFromStageCenter = pointBearingFromStageCenter + 360; return HSVtoRGB( pointBearingFromStageCenter, 1, 1 ); } private function HSVtoRGB( h:Number, s:Number, v:Number ):uint { var Hi:uint = ( h / 60 ) % 6; var f:Number = h / 60 - Hi; var p:Number = v * ( 1 - s ); var q:Number = v * ( 1 - f * s ); var t:Number = v * ( 1 - ( 1 - f ) * s ); switch( Hi ) { case 0: return toRGB255( v, t, p ); case 1: return toRGB255( q, v, p ); case 2: return toRGB255( p, v, t ); case 3: return toRGB255( p, q, v ); case 4: return toRGB255( t, p, v ); case 5: return toRGB255( v, p, q ); } return 0; } private function toRGB255( r:Number, g:Number, b:Number ):uint { return ( r * 255 << 16 ) + ( g * 255 << 8 ) + b * 255; } } } Code Fullscreen Preview Fullscreen narahater esukei bitmapData mask cacheAsBitmap drawCircle subtract stageWidth stageHeight setPixel unlock lock Point Math.atan2 addChild Bitmap endFill beginFill BitmapData Math.PI uint Sprite sort new page view favorite forked pv284 色相環クラス tkinjo forked:0 favorite:4lines:147 (diff:266)