/ Published in: ActionScript 3
Expand |
Embed | Plain Text
var darkGreenRgbObj:Object = new Object(); darkGreenRgbObj.r = 51; darkGreenRgbObj.g = 102; darkGreenRgbObj.b = 0; var darkGreenHsbObj:Object = RGBtoHSB(darkGreenRgbObj.r, darkGreenRgbObj.g, darkGreenRgbObj.b); trace("RGB: " + darkGreenRgbObj.r + ", " + darkGreenRgbObj.g + ", " + darkGreenRgbObj.b); trace("HSB: " + darkGreenHsbObj.h + ", " + darkGreenHsbObj.s + ", " + darkGreenHsbObj.b); function RGBtoHSB(r:int, g:int, b:int):Object { var hsb:Object = new Object; var _max:Number = Math.max(r,g,b); var _min:Number = Math.min(r,g,b); hsb.s = (_max != 0) ? (_max - _min) / _max * 100: 0; hsb.b = _max / 255 * 100; if(hsb.s == 0){ hsb.h = 0; }else{ switch(_max) { case r: hsb.h = (g - b)/(_max - _min)*60 + 0; break; case g: hsb.h = (b - r)/(_max - _min)*60 + 120; break; case b: hsb.h = (r - g)/(_max - _min)*60 + 240; break; } } hsb.h = Math.min(360, Math.max(0, Math.round(hsb.h))) hsb.s = Math.min(100, Math.max(0, Math.round(hsb.s))) hsb.b = Math.min(100, Math.max(0, Math.round(hsb.b))) return hsb; } // OUTPUT // RGB: 51, 102, 0 // HSB: 90, 100, 40
Comments
Subscribe to comments
You need to login to post a comment.

It's a great series of conversions functions that you put up. However in this one, I was experiencing some inconsistency when translating max red into the correlating hue.
I added one line, which seems to have helped to get the proper output for H:
case r: hsb.h = (g - b)/(_max - _min)*60 + 0; if (hsb.h < 0) hsb.h = 360 + hsb.h; // <--- added this break;Bah, that comment formatting didn't seem to work properly, so it looks confusing. This is the line:
if (hsb.h < 0) hsb.h = 360 + hsb.h;