Skip to content

Instantly share code, notes, and snippets.

@akirayou
Created June 26, 2022 00:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save akirayou/8ae5c63a2478d3bbe734cf4bcb4ce4b8 to your computer and use it in GitHub Desktop.
Save akirayou/8ae5c63a2478d3bbe734cf4bcb4ce4b8 to your computer and use it in GitHub Desktop.
HSV to RGB
void hsv2rgb(byte h/*0-252*/,byte s/*0-255*/,byte v/*0-255*/, unsigned char *r, unsigned char *g, unsigned char *b){
byte i=h/42;
byte f=h%42;
word tw,p1,p2,p3;
tw=255*42-s*42;
p1=((unsigned long)tw*v+21*255)/42/255;
tw=255*42-s*f;
p2=((unsigned long)tw*v+21*255)/42/255;
tw=255*42-s*(42-f);
p3=((unsigned long)tw*v+21*255)/42/255;
if(255<p1)p1=255;
if(255<p2)p2=255;
if(255<p3)p3=255;
if(p1<0)p1=0;
if(p2<0)p2=0;
if(p3<0)p3=0;
switch(i){
case 0:
{*r = v ;*g = p3 ;*b = p1;}
break;
case 1:
{*r = p2 ;*g = v ;*b = p1;}
break;
case 2:
{*r = p1 ;*g = v;*b = p3;}
break;
case 3:
{*r = p1 ;*g = p2 ;*b = v;}
break;
case 4:
{*r = p3 ;*g = p1 ;*b = v;}
break;
default:
{*r = v ;*g = p1 ;*b = p2;}
break;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment