optimierung?



  • Hi,

    ich habe folgende Funktion:

    inline unsigned long COLOR_ARGB (unsigned char a, unsigned char r, unsigned char g, unsigned char b) 
    {
        // gibt einen DWORD im 0xAARRGGBB format wieder
        return  ((static_cast<unsigned long>(0xFF000000 * (a/255.0f))) & 0xFF000000) +
                ((static_cast<unsigned long>(0x00FF0000 * (r/255.0f))) & 0x00FF0000) +
                ((static_cast<unsigned long>(0x0000FF00 * (g/255.0f))) & 0x0000FF00) +
                ((static_cast<unsigned long>(0x000000FF * (b/255.0f))) & 0x000000FF);
    }
    

    nun jetzt nerven mich hier sehr die 4 divisionen und die 4 casts. wie kann ich die wegoptimieren?



  • Das ist ja fast ein Fall für thedailywtf ...

    inline unsigned long COLOR_ARGB /* nette Namenskonvention :p */ (unsigned char a, unsigned char r, unsigned char g, unsigned char b)
    {
      return (unsigned long)a << 24 | (unsigned long)r << 16 | (unsigned long)g << 8 | (unsigned long)b;
    }
    


  • onion CoolConverter{
       struct asChar
          char b,g,r,a;
       }
       unsigned long asLong;
    }
    inline unsigned long COLOR_ARGB (unsigned char a, unsigned char r, unsigned char g, unsigned char b) 
    {
        CoolConverter cc;
        cc.asChar.a=a;
        cc.asChar.a=r;
        cc.asChar.a=g;
        cc.asChar.a=b;
        return  cc.asLong;
    }
    

    oder lieber

    return (a<<24ul)|(b<<16ul)|(g<<8ul)|r;
    


  • volkard schrieb:

    onion
    

    Du kannst es nicht lassen, oder? 😃 👍



  • soll das vom copy und pasten abhalten?



  • @Volkard:
    Jetzt weiß ich auch wieso man dich "Der Pate" nennt, vorallem das 24ul war mir neu 🙂

    gibts auch ein ui oder uc?



  • *** schrieb:

    gibts auch ein ui oder uc?

    Ja, aber nicht als Literal Suffix.


Anmelden zum Antworten