// Convert RGB values to HSV values for a given triplet of color information // // ColdFusion MX Routine written by Brian Ghidinelli (http://www.ghidinelli.com) // // Usage: resultStructure = RGBtoHSV(red:0-255, green:0-255, blue:0-255); function RGBtoHSV(r, g, b) { result = structNew(); // normalize values r = r / 255; g = g / 255; b = b / 255; // find min and max min = min(b, min(r, g)); max = max(b, max(r, g)); v = max; delta = max - min; if( max NEQ 0 ) s = delta / max; // s else { // r = g = b = 0 // s = 0, v is undefined s = 0; h = -1; result.h = h; result.s = s; result.v = v; return result; } // CF can't handle Infinite values well, so approximate the zero if (delta EQ 0) delta = 0.0000001; if(r EQ max) h = (g - b) / delta; // between yellow & magenta else if (g EQ max) h = 2 + (b - r) / delta; // between cyan & yellow else h = 4 + (r - g) / delta; // between magenta & cyan h = h * 60; // degrees if (h LT 0) h = h + 360; result.h = int(h); result.s = int(s*100)/100; result.v = int(v*100)/100; return result; }