ARGB nach DWORD konvertieren
-
Ich habe Alpha, Rot, Grün und Blau mit den Werten 0 bis 255. Wie kann ich die jetzt zu einem DWORD konvertieren?
Danke im Voraus.
-
In DirecX nehm ich mal an?
Mit dem Macro D3DCOLOR_ARGB.
Aus der DX Dokumentation:
D3DCOLOR_ARGB
Initializes a color with the supplied alpha, red, green, and blue values.#define D3DCOLOR_ARGB(a,r,g,b) ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff)))Parameters
a
Alpha component of the color. This value must be in the range 0 through 255.
r
Red component of the color. This value must be in the range 0 through 255.
g
Green component of the color. This value must be in the range 0 through 255.
b
Blue component of the color. This value must be in the range 0 through 255.Return Values
Returns the D3DCOLOR value that corresponds to the supplied ARGB values.
-
Für konvertierungszwecke benutze ich immer units. Weiß zwar nicht wie die performance davon ist, aber ist schneller und mit weniger fehlern geschrieben als jede "manipulations"-funktion:
unit ARGB_DWORD { struct{ char a; char r; char g; char b; }; DWORD value; };
-
Brauch ich zwar nicht für DirectX, aber das kann ich ja trotzdem verwenden.
Vielen Dank!
-
matimatiker schrieb:
Für konvertierungszwecke benutze ich immer units. Weiß zwar nicht wie die performance davon ist, aber ist schneller und mit weniger fehlern geschrieben als jede "manipulations"-funktion:
das haengt nur von der gewohnheit ab, aber man sollte als programmierer schon ohne probleme mal ein paar shift und bitmask operationen hinklatschen koennen die richtig sind, zumal dein beispiel nur fuer einen trivialfall zutrifft, fuer R4G4B4A4 oder R5G6B5 musst du den fuer dich fehleranfaelligen weg nutzen.
-
matimatiker schrieb:
Für konvertierungszwecke benutze ich immer units. Weiß zwar nicht wie die performance davon ist, aber ist schneller und mit weniger fehlern geschrieben als jede "manipulations"-funktion:
unit ARGB_DWORD { struct{ char a; char r; char g; char b; }; DWORD value; };- Du meinst union
- So eine union ist oft langsamer als die Version mit Bits rumschieben, weil die union Geschichte u.U. schlechter optimiert werden kann. Letztlich muss man aber wohl einen Test machen um zu sehen was wirklich schneller ist.
-
hustbaer schrieb:
...
2) So eine union ist oft langsamer als die Version mit Bits rumschieben, weil die union Geschichte u.U. schlechter optimiert werden kann. Letztlich muss man aber wohl einen Test machen um zu sehen was wirklich schneller ist.ja es ist langsasmmer, aber das hat er wohl auch geschrieben

-
hustbaer schrieb:
- Du meinst union
- So eine union ist oft langsamer als die Version mit Bits rumschieben, weil die union Geschichte u.U. schlechter optimiert werden kann. Letztlich muss man aber wohl einen Test machen um zu sehen was wirklich schneller ist.
zu 1) Ja. Habe mich schon gewundert warum es hier nicht als schlüsselwort erkannt wurde.
zu 2) "schneller" bezog sich bei mir aufs "geschrieben".- Kann man da eigentlich nicht soetwas programmieren, was einem die Umwandlung aus den chars nach dword automatisch eine Bitverschiebungsoperation erstellt?
werde mir das mal irgendwann mal im sommer anschauen, wenn ich zeit habe.
-
Ok, ich hab das als "(schneller) und (einfacher geschrieben)" interpretiert, nicht als "(schneller und einfacher) geschrieben".
Hab' mich schon gewundert warum jmd. schreibt er weiss nicht wie die performance ist aber es ist schneller