Tips

16進数からRGBカラーを計算するメソッド

日付2009/12/09
ID75946 (英語原文参照)
バージョン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