HSPでカラーコードを使う。

#deffunc cc2rgb ref array RGB,str cc
カラーコードをRGB配列に変換する。
#define ctype apply3 array RGB
配列を3つの引数に展開する。
#define ccolor str cc
カラーコードを直接colorに適用する。

同じ色でcolorを何回も適用する場合はRGB配列をキャッシュとして保持しておいた方がオーバーヘッドも少なくていいと思う。

#deffunc cc2rgb ref array RGB,str cc
カラーコードをRGB配列に変換する。
#define ctype apply3 array RGB
配列を3つの引数に展開する。
#define ccolor str cc
カラーコードを直接colorに適用する。

同じ色でcolorを何回も適用する場合はRGB配列をキャッシュとして保持しておいた方がオーバーヘッドも少なくていいと思う。

  • タグ:
  • タグはありません
#module @cc2rgb
#deffunc local cc2rgb array RGB,str _cc
cc=_cc
ccLen=strlen(cc)
cci=int("$"+strmid(cc,1,ccLen-1))
if ccLen=7 {
R=cci>>16&$FF
G=cci>>8 &$FF
B=cci &$FF
}
else:if ccLen=4 {
R=cci>>8&$F: R|=R<<4
G=cci>>4&$F: G|=G<<4
B=cci &$F: B|=B<<4
}
else: return 1
RGB=R,G,B
return 0
#define global cc2rgb(%1,%2) dim %1,3: cc2rgb@@cc2rgb %1,%2
#define global ctype apply3(%1) %1(0),%1(1),%1(2)
#define global ccolor(%1) %tccolor \
cc2rgb %i,%1 :\
color apply3(%o)
#global
cc2rgb skyBlue,"#3399FF"
cc2rgb pink,"#F7F"
color apply3(skyBlue)
boxf 0,0,200,200
color apply3(pink)
mes strf("skyBlue=RGB(%d,%d,%d)",apply3(skyBlue))
mes strf("pink=RGB(%d,%d,%d)",apply3(pink))
ccolor "#33FF33"
mes "GReeeeeN"
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX