颜色值进制转换
专业的和非专业程序员在编程时都碰到过颜色值的表达式。特别是在编制网页和设计界面时,都要选择颜色。各语言的颜色值表达式就两种,十六进制的颜色值hex$和十进制的RGB格式。现成的调色板颜色表也是这两种格式。写代码时会遇到写颜色值码,就会用到这两种颜色值的转换。基础的方法是十进制转十六进制,反过来十六进制转十进制二种方法。颜色值是分3段来转换的,若是aRGB格式分4段。
每段只需要 0-255 <转换> 00 - ff。
颜色值表达格式:
hex = 0xff7dff RGB=(255,125,255)
hex = # ff7dff RGB=(255,125,255)
aHex = 0xff7d7dff aRGB=(255,125,125,255)
今写了二个进制转换函数:
十进制转十六进制 dec2hex ()
十六进制转十进制 hex2dec ()
以及二个颜色值转换函数:
十六进制颜色值转RGB(r, g, b) :hex2RGB ()
RGB颜色值转为十六进制颜色值:RGB2hex ()
hex2RGB (){ //十六进制颜色值转RGB(r, g, b)
//输入十六进制颜色值转换为十进制RGB格式颜色值
//例: color$="0xffe992" ; 格式输入颜色值字串
print "颜色值字串 = ",color$ ;
get$=subString (color$, 2, 2);
hex2dec () ;
R=dec ;
get$=subString (color$, 4, 2);
hex2dec () ;
G=dec ;
get$=subString (color$, 6, 2);
hex2dec () ;
B=dec ;
print "RGB = ", "( ",R," , ",G," , ",B," )" ; //输出
print " " ;
}//hex2RGB ()
test (){ //测试十六进制颜色值转换
//十六进制颜色值转为RGB
clearOutput ();
color$="0xffe992" ; //格式输入颜色值字串
hex2RGB () ;
color$="0x007d7d" ; //格式输入颜色值字串
hex2RGB () ;
color$="0x00abff" ; //格式输入颜色值字串
hex2RGB () ;
//反转 >
print "反转 > " ;
RGB2hex ();
color$="0x807aff" ; //格式输入颜色值字串
hex2RGB () ;
//反转 >
print "反转 > " ;
RGB2hex ();
}//test ()
RGB2hex (){
//RGB颜色值转为十六进制颜色值
string ss, ss1, ss2, ss3 ;
//传入 R=255 ; G=128 ; B=128 ;
//**** dec To hex and show hex
dec=R ; dec2hex() ; ss1=hex ;
dec=G ; dec2hex() ; ss2=hex ;
dec=B ; dec2hex() ; ss3=hex ;
ss="0x"+ss1+ss2+ss3 ;
print "RGB = ", "( ",R," , ",G," , ",B ," )" ;
print "十六进制颜色值 = ", ss ;
print " ";
}//RGB2hex ()
test16 (){ //测试RGB转换十六进制颜色值
clearOutput ();
R=255 ; G=128 ; B=128 ;
RGB2hex ();
R=55 ; G=98 ; B=255 ;
RGB2hex ();
R=155 ; G=255 ; B=25 ;
RGB2hex ();
R=255 ; G=233 ; B=146 ;
RGB2hex ();
}//test16 ()
//二个函数:
//十进制转十六进制 dec2hex ()
//十六进制转十进制 hex2dec ()
dec2hex (){
//十进制非负整数int dec 转为十六进制值 hex $
string hx$ ;
hx$="0123456789ABCDEF" ;
hex=""; //init 输出串
DecToHex :
//** do calculate until dec=0, return hex
k=dec-dec/16*16 ; //k=dec Mod 16, k=dec % 16
dec=dec/16 ; //整除,dec\16
hex=subString (hx$, k,1)+hex ;
if (dec>0) goto DecToHex ;
//return string hex
}//dec2hex ()
hex2dec (){
//传入十六进制数转换为十进制数
//传入 string get$ 输出 int dec
nlen=len (get$); //字串长度
dec=0 ; //init 置初值 0
//开始计算 >
for (i=0; i<nlen; i++){
a$=subString (get$, i, 1);
//字符串转为数值的方法很多,我采用最简单直观的写法,字母大小写都可以。
if (a$=="0") k=0 ;
if (a$=="1") k=1 ;
if (a$=="2") k=2 ;
if (a$=="3") k=3 ;
if (a$=="4") k=4 ;
if (a$=="5") k=5 ;
if (a$=="6") k=6 ;
if (a$=="7") k=7 ;
if (a$=="8") k=8 ;
if (a$=="9") k=9 ;
if (a$=="A"||a$=="a") k=10 ;
if (a$=="B"||a$=="b") k=11 ;
if (a$=="C"||a$=="c") k=12 ;
if (a$=="D"||a$=="d") k=13 ;
if (a$=="E"||a$=="e") k=14 ;
if (a$=="F"||a$=="f") k=15 ;
kn=nlen-i-1 ; //高权位起降幂计算
dec=dec+(int)(k*pow(16,kn)) ; //乘方累加
} // return dec
}//hex2dec ()
//**** End ****