Exempel på rätt svårläst kod:
HSVf inline rgb_to_hsv(const BGRf& pix){
const int p = 0xFF; //
HSVf col;
int hue;
int delta = 0;
if (pix.r>pix.g){
if (pix.r>pix.b){//r>b
if (pix.b>pix.g)//r>b>g
delta = pix.r-pix.g;
else //r>g>b
delta = pix.r-pix.b;
col.v = pix.r;
hue = (pix.g-pix.b)*p;
} else { // b>r>g
col.v = pix.b;
delta = pix.b-pix.g;
hue = 4*p*delta + (pix.r-pix.g)*p;
}
} else { //g>r
if (pix.b>pix.g){//b>g>r
col.v = pix.b;
delta = pix.b-pix.r;
hue = 4*p*delta + (pix.r-pix.g)*p;
} else {//g>b
if (pix.b>pix.r)//g>b>r
delta = pix.g-pix.r;
else //g>r>b
delta = pix.g-pix.b;
col.v = pix.g;
hue = 2*p*delta + (pix.b-pix.r)*p;
}
}
if (!delta){
col.h = 0;
col.s = 0;
return col;
}
col.s = (delta*p*div_lookup[col.v])>>16;
hue = (hue*div_lookup[delta])>>16;
col.h = (hue % (6*p))/6;
return col;
}
Exempel på tydligare kod:
cdef HSV rgb_to_hsv(int r, int g, int b):
# Returns a struct with the input rgb color described as hsv
cdef int p
p = 0xFF
cdef int maxc, minc, delta
cdef HSV col
maxc = max(max(r,g),b)
minc = min(min(r,g),b)
delta = maxc-minc
col.v = maxc
if delta == 0:
col.h = 0
col.s = 0
return col
col.s = p*delta/maxc
if r == maxc:
col.h = (g-b)*0xFF/delta
elif g == maxc:
col.h = 2*p + (b-r)*0xFF/delta
else:
col.h = 4*p + (r-g)*0xFF/delta
col.h = (col.h % (6*p))/6
return col
De gör samma sak, men olika fort