JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=f07804e2b3cfd709d66486a90691851cMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

COLORREF->RGB
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Fallen
JLI MVP
JLI MVP


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

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

Wenn du GetSurfaceDesc angewand hast musst du GetPixelFormat anwenden und in der Struktur müsste dann alles enthalten sein:

Code:
typedef struct _DDPIXELFORMAT{
  DWORD    dwSize;
  DWORD    dwFlags;
  DWORD    dwFourCC;
  union
  {
    DWORD    dwRGBBitCount;
    DWORD    dwYUVBitCount;
    DWORD    dwZBufferBitDepth;
    DWORD    dwAlphaBitDepth;
  };
  union
  {
    DWORD    dwRBitMask;
    DWORD    dwYBitMask;
  };
  union
  {
    DWORD    dwGBitMask;
    DWORD    dwUBitMask;
  };
  union{
    DWORD    dwBBitMask;
    DWORD    dwVBitMask;
  };
  union
  {
    DWORD    dwRGBAlphaBitMask;
    DWORD    dwYUVAlphaBitMask;
  };
} DDPIXELFORMAT, FAR* LPDDPIXELFORMAT;


_________________
"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: 38
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 18.05.2004, 20:09    Titel: Antworten mit Zitat

Ich hab jetzt mal versucht, einfach einen Modus(555 oder 565) anzunehmen.
Da es bei 32 Bit mit folgendem Code funktioniert:
Code:
r=color<<16;
g=color<<8;
b=color;

, habe ich dafür jetzt mal andere Zahlen eingesetzt.
Code:
r=color<<10;
g=color<<5;
b=color;

Wenn ich das jetzt richtig verstanden habe, sollte das doch eigentlich bei 555 funzen, richtig?
Leider funktioniert es weder so, noch mit <<11 und <<6 Crying or Very sad
_________________
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: 49
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 18.05.2004, 20:29    Titel: Antworten mit Zitat

Was ist denn Color, wenn das die 32 Bit Farbe ist, kann es nicht gehen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 38
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 18.05.2004, 20:34    Titel: Antworten mit Zitat

Christian Rousselle hat Folgendes geschrieben:
Was ist denn Color, wenn das die 32 Bit Farbe ist, kann es nicht gehen.

Das ist es.
Aber was muss ich denn da noch machen? Surprised
_________________
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: 49
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 18.05.2004, 21:04    Titel: Antworten mit Zitat

Du muss es, wie ich gezeigt habe umrechnen....dass muss dir doch klar sein. Du muss 3 8 Byte Werte auf 3 5 Byte Werte umrechnen, dass kann nicht nur mit shiften gehen. Hast du dir den Code den ich gepostet habe mal angeschaut? Hast du es so ausprobiert?

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


Alter: 38
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 19.05.2004, 13:47    Titel: Antworten mit Zitat

Christian Rousselle hat Folgendes geschrieben:
Du muss es, wie ich gezeigt habe umrechnen....dass muss dir doch klar sein. Du muss 3 8 Byte Werte auf 3 5 Byte Werte umrechnen, dass kann nicht nur mit shiften gehen. Hast du dir den Code den ich gepostet habe mal angeschaut? Hast du es so ausprobiert?

Ja ich habs mir angeschaut, aber kapiert habe ichs noch nicht wirklich.
Heißt das, ich hab das shiften richtig gemacht, aber ich muss vorher noch jeden Wert / 255.0f * 32.0f(bzw. 64.0f) nehmen?
_________________
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: 49
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 19.05.2004, 14:56    Titel: Antworten mit Zitat

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


Alter: 38
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 19.05.2004, 17:51    Titel: Antworten mit Zitat

Hmm...irgendwie funzt das nicht.

Ich hab das jetzt so probiert:
Code:
r=Farbe>>16;
g=Farbe>>8;
b=Farbe;

r/=(255.0f*32.0f);
g/=(255.0f*32.0f);
b/=(255.0f*32.0f);

Aber es bringt immer noch total falsche Werte(auch bei /255.0f*64.0f).

Wozu ist das Dividieren und Multiplizieren denn genau gut? Confused
Bei der Konvertierung von RGB in COLORREF geht es doch auch einfach nur durch shiften(siehe erster Beitrag im Thema).
_________________
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: 49
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 19.05.2004, 18:30    Titel: Antworten mit Zitat

Kannst du mal ein Beispielprogramm zusammenbauen und mir den Code schicken?

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


Alter: 38
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 20.05.2004, 10:58    Titel: Antworten mit Zitat

Okay, ich mach mal in nächster Zeit eines Wink
Wohin soll ich das dann schicken?
_________________
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: 49
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 20.05.2004, 12:00    Titel: Antworten mit Zitat

an mich Smile Christian(at)Rousselle.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
The Lord of Programming
Living Legend


Alter: 38
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 21.05.2004, 20:31    Titel: Antworten mit Zitat

Ich habs jetzt mit Christians Code versucht, aber da gibt es immer noch Abweichungen(von ca. 0-8).
Im Buch wird das ganze ja ohne static_cast etc... beschrieben. Da geht es einfach per shiften:
Code:
COLORREF color=(((Farbe)>>cPositionred)<<cShiftred)+;
(((Farbe)<<cPositiongreen)>>cShiftgreen)+;
(((Farbe)<<cPositionblue)>>cShiftblue);


Wenn ich davon die Umkehrung nehme, dann funktioniert es ähnlich wie Christians Code, aber eben auch noch mit Abweichungen:
Code:
r=(((Farbe)>>cPositionred)<<cShiftred);
g=(((Farbe)>>cPositiongreen)<<cShiftgreen);
b=(((Farbe)>>cPositionblue)<<cShiftblue);


Allerdings habe ich jetzt festgestellt, dass nicht mal der erste Code(aus JLI1) richtig funktioniert. D.h. aus 3 RGB-Werten wird auf meinem Rechner hier der falsche COLORREF bei 16 Bit errechnet :cry:

<edit>
Was macht eigentlich "static_cast<float>"?
</edit>
_________________
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: 49
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 21.05.2004, 21:12    Titel: Antworten mit Zitat

Die Abweichung von 0-8 liegt daran, dass 8*32 256 ist. D.h. immer wenn du einen 32 Bit Wert auf 16 Bit umrechnest (besser gesagt einen 8 Bit Wert auf 5 Bit) und diesen wieder zurückrechnen willst, muss es zu Verlusten kommen. Durchschnittlich 8 Werte aus dem 8 Bit Wertebereich werden auf einen Wert aus dem 5 Bit Wertebereich gemappt. Was du beschreibst ist normal.

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


Alter: 38
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 21.05.2004, 21:18    Titel: Antworten mit Zitat

Aha.
Und gibt es da keine Möglichkeit, das auf 16 Bit zu lassen?
Oder ist ein COLORREF zwangsweise 32 Bit? (eigentlich logisch) Wink
_________________
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: 38
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 22.05.2004, 21:12    Titel: Antworten mit Zitat

Jetzt funktionierts jedenfalls(bis auf die kleinen Abweichungen) perfekt =)

Danke für eure Mühe & Hilfe Very Happy
_________________
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 Zurück  1, 2
Seite 2 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