JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

COLORREF->RGB
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 12.05.2004, 21:26    Titel: COLORREF->RGB Antworten mit Zitat

Was ist denn nun eigentlich die Umkehrung vom folgenden Code zum errechnen eines COLORREF-Werts aus den einzelnen RGB-Werten?
Code:
COLORREF farbe=(((Rot) >> cShiftred) << cPositionred)+
(( (Gruen) >> cShiftgreen) << cPositiongreen)+
(( (Blau) >> cShiftblue) << cPositionblue));


Die Umrechung bei der Farbtiefe von 32 Bit funzt einwandfrei. Leider ist das bei 16 Bit nicht so.
Deshalb meine Frage: Wie bekommt man die einzelnen RGB-Werte aus einem COLORREF?

PS: cShiftx und cPositionx sind jeweils wie im Buch definiert.
PPS: Über google find ich nur Blödsinn.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 12.05.2004, 22:25    Titel: Antworten mit Zitat

Ich bin mir nicht sicher, was du erreichen willst, COLORREF ist einfach ein DWORD. Ich denke das die Farbe dort als A8R8G8B8 gespeichert ist, nie in 16 Bit, bin mir aber nicht sicher. Wie du dass in 16 Bit umrechnest weiss du aber dann?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 12.05.2004, 22:55    Titel: Antworten mit Zitat

Ach jezz versteh ich du willst aus dem COLORREF wert wieder die einelnen RGBA Werte haben stimmts ?

Mit GetRValue, GetGValue und GetBValue funktionierts nicht oder ?
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 13.05.2004, 21:21    Titel: Antworten mit Zitat

@FallenAngel: Jepp, ich will die einzelnen Werte haben.

Was sind das für Funktionen(GetXValue)? Gibts die auch unter DX8?

@Christian: Du hast doch in JLI1 u. 2 beschrieben, wie man aus den COLORREF-Werten die einzelnen Werte ausrechnen kann. Dabei gibt es eine Fallunterscheidung zwischen einer Farbtiefe von 32 Bit, 24 Bit und 16 Bit.
Bei 32 Bit funktioniert es einwandfrei, doch bei 16 Bit kommt es zu völlig anderen Werten Confused
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 15.05.2004, 21:32    Titel: Antworten mit Zitat

Christian Rousselle hat Folgendes geschrieben:
Wie du dass in 16 Bit umrechnest weiss du aber dann?

Genau das ist ja mein Problem ^^ Confused
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 15.05.2004, 22:35    Titel: Antworten mit Zitat

Tschuldigung, hatte nicht gesehen, dass du geantwortet hattest. Wie ist denn genau das Problem? Bist du sicher, dass in der COLORREF Variablen 16 Bit drin sind oder muss du den 32 Bit-Wert auf 16 runterechnen? Dann muss du wissen, ob es R5G5B5 oder R5G6B5 ist und ensprechend umrechnen, d.h. nicht nur schiften, sondern die 8 Bit auf 5 bzw. 6 umrechnen.

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 16.05.2004, 13:03    Titel: Antworten mit Zitat

Hmm...ich bin mir nicht sicher, aber ich glaube, die RGB-Werte bleiben in jeder Farbtiefe gleich. COLORREF ist ja eigentlich ein integer. D.h. es müsste eigentlich immer die selbe Bit-/Byte-Menge (32Bit/4Byte) in einem COLORREF gespeichert sein.
Aber bei z.B. 32-Bit Farbtiefe geht das Umrechnen ja einfach durch einmal um 8 Bit shiften und einem 16 Bit(weiß gerade nicht mehr, ob << oder >>).
Mein Problem ist, das jetzt bei 16 Bit Farbtiefe zu machen.
Du hast ja in den Büchern beschrieben, wie man bei 16 Bit 3 RGB-Werte in einen COLORREF hineinbringt. Dazu muss man doch am Anfang des Programms irgendwelche Shiftmasken, etc... ausrechnen(d.h. 666 und 656 sollten auch berücksichtigt werden).
Bloß mir fehlt jetzt die Umkehrung. In den Büchern steht nämlich nicht, wie man bei 16Bit einen COLORREF in die drei RGBs aufsplittet.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 17.05.2004, 06:54    Titel: Antworten mit Zitat

Dürfte das nicht das gleiche sein denn in allen Fällen wird ja der DWORD Typ genutzt. Deshalb sollten die GetXValue Funktionen auch da noch funktionieren wo mit 16Bit farbwerten gearbeitet wird. Wenn nicht dann musste dir die Funktionen nur ein wenig anpassen.

In DX siond die nicht mit dabei sodnern glaube nur in der WinSDK.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 17.05.2004, 12:42    Titel: Antworten mit Zitat

Also berücksichtigen diese GetXValue() die Farbtiefe?

Aber sind die Funktionen auch schnell?
Und welche Header muss ich da includieren? Einfach windows.h?
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 17.05.2004, 13:01    Titel: Antworten mit Zitat

Im Grunde dürften die Funktionen nur die inverse version der D3DCOLOR_XRGB,... makros sein also müssten sie recht schnell sein. windows.h muss includiert werden. Oder du siehst dir das hier an:

Code:

#define GetRValue(rgb)   ((BYTE)(rgb))
#define GetGValue(rgb)   ((BYTE)(((WORD)(rgb)) >> 8))
#define GetBValue(rgb)   ((BYTE)((rgb) >> 16))


Ob es mit jeder Farbtiefe funktioniert kann ich nicht sagen. Würde aber auf ja tippen.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 17.05.2004, 13:10    Titel: Antworten mit Zitat

FallenAngel84 hat Folgendes geschrieben:
Im Grunde dürften die Funktionen nur die inverse version der D3DCOLOR_XRGB,... makros sein also müssten sie recht schnell sein. windows.h muss includiert werden.

Passt das auch, wenn ich mit DX7 bzw. DirectDraw arbeite?

Code:
#define GetRValue(rgb)   ((BYTE)(rgb))
#define GetGValue(rgb)   ((BYTE)(((WORD)(rgb)) >> 8))
#define GetBValue(rgb)   ((BYTE)((rgb) >> 16))

So habe ich es ja bisher gemacht. Bloß wird hier ja nur 32 Bit-Farbtiefe berücksichtigt Confused

In JLI1 steht auf Seite 302 ff. der ganze Code zum berechnen. Da steht auch die Fallunterscheidung mit 16 Bit.
Bloß steht da wie man sieht leider nur die Version RGB->COLORREF!
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 17.05.2004, 13:37    Titel: Antworten mit Zitat

Also nochmal, du willst einen 32Bit Farbwert in 16 Bit umwandeln, ja? Soweit ist das richtig?

Wenn ja, dann muss du wissen, ob es sich um 565 oder 555 handelt und dann:

Wenn 555 und COLORREF enthält einen 32 Bit Farbwert:

Code:

float fRot   = static_cast<float>((nCOLORREF >> 16) & 0xFF);
float fGruen = static_cast<float>((nCOLORREF >> 8) & 0xFF);
float fBlau  = static_cast<float>(nCOLORREF & 0xFF);

int nRot   = static_cast<int>(fRot / 255.0f * 32.0f);
int nGruen = static_cast<int>(fGruen / 255.0f * 32.0f); // hier bei 565 fGruen / 255.0f * 64.0f
int nBlau  = static_cast<int>(fBlau / 255.0f * 32.0f);

// und jetzt wieder shiften:

unsigned short color = nRot << 10 + nGruen << 5 + nBlau;  // bzw. nRot << 11 + nGruen << 6 + nBlau



Ich habe das einfach mal so hingeschrieben, es enthält bestimmt ein paar Fehler, ich hoffe aber, die Idee wird klar.

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 17.05.2004, 13:50    Titel: Antworten mit Zitat

Christian Rousselle hat Folgendes geschrieben:
Also nochmal, du willst einen 32Bit Farbwert in 16 Bit umwandeln, ja? Soweit ist das richtig?

Ich glaube schon. Ich will einfach den COLORREF bei 16 Bit ausrechnen. Das kommt wohl aufs gleiche heraus.

Aber wie kriege ich jetzt heraus, ob es 555 oder 565 ist? Im Buch steht ja nur, wie man die shiftvariablen herausfinden kann.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 17.05.2004, 14:04    Titel: Antworten mit Zitat

[quote="The Lord of Programming"]
Christian Rousselle hat Folgendes geschrieben:

Aber wie kriege ich jetzt heraus, ob es 555 oder 565 ist?


Es was? Wenn du ein Surface meinst, dann mit GetSurfaceDesc(). GetCaps() könnte auch helfen.

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 17.05.2004, 14:10    Titel: Antworten mit Zitat

Ist das nicht von irgendeiner Einstellung abhängig?
Dann sollten doch alle Surfaces auf einem PC im gleichen Modus sein.

Aber ich probiers mal mit der Surfacebeschreibung. Wo genau in SurfaceDesc ist denn das gespeichert?
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum