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 neugibts auch ein ui oder uc?
-
*** schrieb:
gibts auch ein ui oder uc?
Ja, aber nicht als Literal Suffix.