16進数からRGBカラーを計算するメソッド
日付 | 2009/12/09 |
---|---|
ID | 75946 (英語原文参照) |
バージョン | 11 |
プラットフォーム | Mac & Win |
RGB値による色の表現は、通常、16進数で表現したほうが都合が良いとされていますが、SVGでは、これを10進数に変換しなければならない場合があります。下記のメソッドは、16進数を解析して10進数のRGBを計算するためのものです。
` M>ethod: Hex2RGB ` ` Parameters ` $1 - Hex Value ` ` Returns ` $2 - pointer to a numeric (R) ` $3 - pointer to a numeric (G) ` $4 - pointer to a numeric (B) C_TEXT($1;$hex_t) C_POINTER($2;$3;$4) C_POINTER($red_p;$green_p;$blue_p) If (Count parameters>=4) $hex_t:=$1 Case of :(Not((Type($2->)=Is Integer)|(Type($2->)=Is LongInt)|(Not((Type($2->)=Is Real))))) :(Not((Type($3->)=Is Integer)|(Type($3->)=Is LongInt)|(Not((Type($3->)=Is Real))))) :(Not((Type($4->)=Is Integer)|(Type($4->)=Is LongInt)|(Not((Type($4->)=Is Real))))) Else C_LONGINT($len_l;$value_l;$index_l;$dec_l) $red_p:=$2 $green_p:=$3 $blue_p:=$4 $len_l:=Length($hex_t) For ($index_l;$len_l;1;-1) Case of : ($hex_t[[$index_l]]="A") $value_l:=10 : ($hex_t[[$index_l]]="B") $value_l:=11 : ($hex_t[[$index_l]]="C") $value_l:=12 : ($hex_t[[$index_l]]="D") $value_l:=13 : ($hex_t[[$index_l]]="E") $value_l:=14 : ($hex_t[[$index_l]]="F") $value_l:=15 Else $value_l:=Num($hex_t[[$index_l]]) End case If ($index_l<$len_l) $dec_l:=$dec_l+($value_l*(16^($len_l-$index_l))) Else $dec_l:=$dec_l+$value_l End if End for $red_p->:=0 $green_p->:=0 $blue_p->:=0 If ($dec_l>0) $red_p->:=$dec_l >> 16 $dec_l:=$dec_l-($red_p-> << 16) $green_p->:=($dec_l >> 8) $blue_p->:=$dec_l-($green_p-> << 8) End if End case End if