JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

RGB-Werte eines Pixels erfassen (DirectDraw, 16-Bit)

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
DeeJay87
Mini JLI'ler



Anmeldedatum: 02.10.2002
Beiträge: 1

Medaillen: Keine

BeitragVerfasst am: 02.10.2002, 16:11    Titel: RGB-Werte eines Pixels erfassen (DirectDraw, 16-Bit) Antworten mit Zitat

Hallo!
Ich hab ein kleines Problem in meinen DirectDraw Programmen, und dachte mir, vielleicht könnte ich hier Hilfe finden.
Wie auch in dem Buch "Spieleprogrammierung mit DirectX und Visual C++" nutze ich zur Berechnung von Farben und
zur Erfassung des Pixelformats folgende Funktionen:

void DeterminePixelFormat(LPDIRECTDRAWSURFACE7 lpDDSurface){
DDPIXELFORMAT ddpf;
ddpf.dwSize = sizeof(ddpf);
lpDDSurface->GetPixelFormat(&ddpf);

while(0 == (ddpf.dwRBitMask & 1)){
ddpf.dwRBitMask >>= 1;
PosRed++;
}

ShiftRed = (ddpf.dwRBitMask == 31) ? 3 : 2;

while(0 == (ddpf.dwGBitMask & 1)){
ddpf.dwGBitMask >>= 1;
PosGreen++;
}
ShiftGreen = (ddpf.dwGBitMask == 31) ? 3 : 2;

PosBlue = 0;
ShiftBlue = (ddpf.dwBBitMask == 31) ? 3 : 2;
}

int CalcColor(BYTE r, BYTE g, BYTE b){
switch(COLOR_DEPTH){
case 32:
case 24:
return ((r<<16) + (g<<8 ) + b);
break;

case 16:
return ((( (r) >> ShiftRed) << PosRed) +
(( (g) >> ShiftGreen) << PosGreen) +
(( (b) >> ShiftBlue) << PosBlue));

default:
return 0;
}
}

Als nächstes sperre ich eine Oberfläche mit Lock, dann will ich mir den R-, den G- und den B- Wert des Pixels aus seinem Farbwert herausfiltern, um seine Farbe (für einen Fade zum Beispiel) zu manipulieren. Ich habe schon diverse Funktionen geschrieben, die dieses Zweck erfüllen sollten, jedoch funktionierte keine von ihnen...ist es überhaupt möglich die RGB-Werte herauszufiltern?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 02.10.2002, 19:17    Titel: Antworten mit Zitat

Um die einzelnen Farbkomponenten aus einer Farbe rauszufiltern musst du eigentlich nur den Weg umkehren, über den du den Farbwert in der Farbe speicherst.
Code:

int GetRed(int nColor)
{
  switch (COLOR_DEPTH)
  {
  case 24:
    return nColor >> 16;
  case 16:
    return (nColor >> PosRed) << ShiftRed;
  }
}


Die Funktionen fuer Gruen und Blau sind analog zu dieser.
_________________
www.messiahzone.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail 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
Seite 1 von 1

 
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