hsv conversion speed

JavaScript performance comparison

Test case created

Preparation code

 
<script>
Benchmark.prototype.setup = function() {
        function hsvToRGB(h, s, v){
            var r, g, b;
   
            var i = (h *  6)|0;
            var f =  h *  6 - i;
            var p =  v * (1 - s);
            var q =  v * (1 - f * s);
            var t =  v * (1 - (1 - f) * s);
   
            var iMod = i % 6;
   
                   if ( iMod === 0 ) { r = v, g = t, b = p;
            } else if ( iMod === 1 ) { r = q, g = v, b = p;
            } else if ( iMod === 2 ) { r = p, g = v, b = t;
            } else if ( iMod === 3 ) { r = p, g = q, b = v;
            } else if ( iMod === 4 ) { r = t, g = p, b = v;
            } else   /* iMod === 5 */{ r = v, g = p, b = q;
            }
   
            return [
                    (r*255 + 0.5)|0,
                    (g*255 + 0.5)|0,
                    (b*255 + 0.5)|0
            ];
        }
   
        function hsvToB(h, s, v){
            var iMod = ((h*6)|0) % 6;
   
            if ( iMod === 0 ) {
                return ((
                        // p
                        v*(1-s)
                )*255 + 0.5)|0;
            } else if ( iMod === 1 ) {
                return ((
                        // p
                        v*(1-s)
                )*255 + 0.5)|0;
            } else if ( iMod === 2 ) {
                return ((
                        // t
                        (v * (1 - (1-(h*6-((h*6)|0))) * s))
                )*255 + 0.5)|0;
            } else if ( iMod === 3 ) {
                return ((
                        // v
                        v
                )*255 + 0.5)|0;
            } else if ( iMod === 4 ) {
                return ((
                        // v
                        v
                )*255 + 0.5)|0;
            } else /* iMod === 5 */{
                return ((
                        // q
                        v * (1 - (h*6-((h*6)|0)) * s)
                )*255 + 0.5)|0;
            }
        }
   
        function hsvToG(h, s, v){
            var iMod = ((h*6)|0) % 6;
   
            if ( iMod === 0 ) {
                return ((
                        // t
                        (v * (1 - (1-(h*6-((h*6)|0))) * s))
                )*255 + 0.5)|0;
            } else if ( iMod === 1 ) {
                return ((
                        // v
                        v
                )*255 + 0.5)|0;
            } else if ( iMod === 2 ) {
                return ((
                        // v
                        v
                )*255 + 0.5)|0;
            } else if ( iMod === 3 ) {
                return ((
                        // q
                        v * (1 - (h*6-((h*6)|0)) * s)
                )*255 + 0.5)|0;
            } else if ( iMod === 4 ) {
                return ((
                        // p
                        v*(1-s)
                )*255 + 0.5)|0;
            } else /* iMod === 5 */{
                return ((
                        // p
                        v*(1-s)
                )*255 + 0.5)|0;
            }
        }
   
        /**
         * @param   {number} h       The hue
         * @param   {number} s       The saturation
         * @param   {number} v       The value
         * @return  {number}         The red component, in the RGB colour model.
         */

        function hsvToR(h, s, v){
            var iMod = ((h*6)|0) % 6;
   
            if ( iMod === 0 ) {
                return ((
                        // v
                        v
                )*255 + 0.5)|0;
            } else if ( iMod === 1 ) {
                return ((
                        // q
                        v * (1 - (h*6-((h*6)|0)) * s)
                )*255 + 0.5)|0;
            } else if ( iMod === 2 ) {
                return ((
                        // p
                        v*(1-s))
                *255 + 0.5)|0;
            } else if ( iMod === 3 ) {
                return ((
                        // p
                        v*(1-s)
                )*255 + 0.5)|0;
            } else if ( iMod === 4 ) {
                return ((
                        // t
                        (v * (1 - (1-(h*6-((h*6)|0))) * s))
                )*255 + 0.5)|0;
            } else /* iMod === 5 */{
                return ((
                        // v
                        v
                )*255 + 0.5)|0;
            }
        }
   
    var h = 1;
    var s = 0.5;
    var v = 0.6;
   
};
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
hsvToRGB
var rgbs = hsvToRGB( h, s, v )
var r = rgbs[0]
var g = rgbs[1]
var b = rgbs[2]
 
pending…
hsvToR/G/B

var r = hsvToR( h, s, v )
var g = hsvToG( h, s, v )
var b = hsvToB( h, s, v )
 
pending…

You can edit these tests or add even more tests to this page by appending /edit to the URL.

Compare results of other browsers

0 comments

Add a comment