这是hsv转换到rgb的算法:
s/=255
if s=0(s是一个从0到1的一个小数)
   r=g=b=v(r,g,b,v是byte型的)
else
   h/=60;(h是0到360的一个值)
   i=integer(h)
   f=h-i
   a=v*(1-s)
   b=v*(1-s*f)
   c=v*(1-s*(1-f))
   swith(i)
     case 0:r=v;g=c;B=a;
     case 1:r=b;g=v;B=a;
     case 2:r=a;g=v;B=c;
     case 3:r=a;g=b;B=v;
     case 4:r=c;g=a;B=v;
     case 5:r=v;g=a;B=b

解决方案 »

  1.   

    这是我自己写的,老出错,也不知道要怎么改,估计是类型没定义好,thue是我自定义的一个类型,
     THue=0..359;procedure Tform1.hsv2rgb(Hue:Thue;saturation,value:byte;var red,green,blue:byte);
    var
      s,f:Double;
      h:Double;
      i,j:integer;
      m,n,v,k:byte;
    begin
      s:=saturation/255;
      h:=h/60;
      f:=h-(int)h;
      i:=int(h);
      m:=v*(1-s);
      n:=v*(1-s*f);
      k:=v*(1-s*(1-f));
      case i of:
      0: r:=v,g:=k,b:=m;
      1: r:=n,g:=v,b:=m;
      2: r:=m,g:=v,b:=k;
      3: r:=m,g:=n,b:=v;
      4: r:=k,g:=m,b:=v;
      5: r:=v,g:=m,b:=n;end;