JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Eine farbe eines Surfaces verändern
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
Kampfhund
Super JLI'ler


Alter: 41
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 24.07.2002, 14:04    Titel: Eine farbe eines Surfaces verändern Antworten mit Zitat

Hi

ich habe ine funktion geschrieben mit der man eine bestimmte farbe eines Surfaces durch eine andere farbe ersetzt.
Allerdings klappt das nicht so ganz:

weiß (w) soll durch blau(b) ersetzt werden.

WWW
WWW
WWW

wird zu:

BWW
BWW
BWW

und

schwarz(s)

WSW
SWS
WSW

wird zu:

BSB
SBS
BSB


Code:

// Change Color
LPDIRECTDRAWSURFACE7 CDirectDraw::ChangeColor(LPDIRECTDRAWSURFACE7 lpSurface,uint colora,uint colorb)
{
LPDIRECTDRAWSURFACE7lpTmp;
LPDIRECTDRAWSURFACE7lpManipulatedSurface;
DDSURFACEDESC2desc;

ZeroMemory(&desc,sizeof(desc));
desc.dwSize = sizeof(desc);

lpSurface->GetSurfaceDesc(&desc);

desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;

// create Surface in sysmem
m_lpDD7->CreateSurface(&desc,&lpTmp,NULL);
lpTmp->BltFast(0,0,lpSurface,NULL,DDBLTFAST_WAIT);

// lock surface
lpTmp->Lock(NULL,&desc,DDLOCK_WAIT,NULL);

DWORD *dwlpSurface;
if(m_ColorDepth == 16)
{
dwlpSurface = (DWORD*)desc.lpSurface;
}
else
{
dwlpSurface = (DWORD*)desc.lpSurface;
}

int Pitch = desc.lPitch / (m_ColorDepth / 8);

for(int y=0;y<desc.dwHeight;y++)
{
for(int x=0;x<desc.dwWidth;x++)
{
if(dwlpSurface[y*Pitch+x] == colora)
{
dwlpSurface[y*Pitch+x] = colorb;
}
}
}

lpTmp->Unlock(NULL);

desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY;
m_lpDD7->CreateSurface(&desc,&lpManipulatedSurface,NULL);
lpManipulatedSurface->BltFast(0,0,lpTmp,NULL,DDBLTFAST_WAIT);

lpTmp->Release();

return lpManipulatedSurface;
}


Farbmodus: 32 bit
Auflösung: 1024x768
Fullscreen: jo

Kann es sein das DDRAW die farben irgendwie verändert wenn die gleichen farben nebeneinander liegen?

HLP![/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 41
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 24.07.2002, 18:54    Titel: Antworten mit Zitat

liegt wohl am Anti Aliasing
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 41
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 24.07.2002, 19:04    Titel: Antworten mit Zitat

aber irgendwie kann das auch nicht sein, von weiß auf weiß muss er doch nicht überblenden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael
JLI'ler



Anmeldedatum: 20.07.2002
Beiträge: 173
Wohnort: Münster / NRW
Medaillen: Keine

BeitragVerfasst am: 25.07.2002, 08:39    Titel: Antworten mit Zitat

ich weiß es nicht genau aber versuch mal ganz unten bei der erstellung von lpManipulatedSurface eine ganz neue DDSURFACEDESC2-STruktur zu nehmen. ich hatte schon mal probs mit bereits verwendeten DDSURFACEDESC2-STrukturen!
_________________
Es geht auch ohne Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Kampfhund
Super JLI'ler


Alter: 41
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 26.07.2002, 15:30    Titel: Antworten mit Zitat

ne, hat leider nichts gebracht, aber trozdem danke.
ich habs jetzt auch anders gelöst.

kann es vileicht sein das AA nur bei bestimmten blit funktionen angewendet wird? gibt es eine funktion bei der kein AA verwendet wir?
Oder kann es sein das AA nur beim blittem im Video speicher angewendet wird?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Christian Rousselle
Site Admin


Alter: 47
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 26.07.2002, 15:38    Titel: Antworten mit Zitat

Ich müßte mich schon sehr täuschen, aber ich denke, dass AA erst verwendet wird, wenn die Szene/das Frame dargestellt wird, es sollte sich auf keinen Fall auf ein Surface, zumal du die ja lesen kannst auswirken.
Also am AA liegt es nicht.

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Kampfhund
Super JLI'ler


Alter: 41
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 26.07.2002, 15:40    Titel: Antworten mit Zitat

hmm, ich habe es aber hazel geschick und bei ihm scheint es funktioniert zu haben.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kampfhund
Super JLI'ler


Alter: 41
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 26.07.2002, 15:51    Titel: Antworten mit Zitat

ne, hab mich geirrt, hat bei hazel auchnicht gefunzt.

ich habe eine bmp mit weiß gezeichnet, wenn ich allerdings die farbe wechsle ist sie verändert.

ich habe nämlich mal

Code:



   for(int y=0;y<desc.dwHeight;y++)
   {
      for(int x=0;x<desc.dwWidth;x++)
      {
         if(dwlpSurface[y*Pitch+x] >= colora - 100)
         {
            dwlpSurface[y*Pitch+x] = colorb;
         }
      }
   }



geschrieben und da hats geklappt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael
JLI'ler



Anmeldedatum: 20.07.2002
Beiträge: 173
Wohnort: Münster / NRW
Medaillen: Keine

BeitragVerfasst am: 26.07.2002, 16:23    Titel: Antworten mit Zitat

nur mal so: wofür verwendest du diese funktion?
_________________
Es geht auch ohne Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Kampfhund
Super JLI'ler


Alter: 41
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 26.07.2002, 16:39    Titel: Antworten mit Zitat

die funktion verwende ich zB für schriften.
Ich zeichne die buchstaben in weiß auf ne bitmap, dann lade ich die bitmap, erstelle eine instanz meiner eigenen CFont klasse, gebe dort an welche farbe größe usw die shrift haben soll, dann wird eben das weiße der bitmap durch die schriftfarbe ersetzt.

kann man natürlich noch für andere sachen verwenden, zB du willst für jedes team eine Fahne mit der jeweiligen teamfarbe haben, dann wechselst du die farbe eben mit dieser funktion.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Wicky
Junior JLI'ler



Anmeldedatum: 20.07.2002
Beiträge: 50
Wohnort: Ebermannstadt
Medaillen: Keine

BeitragVerfasst am: 26.07.2002, 16:53    Titel: Antworten mit Zitat

Ähm... Wie schnell geht denn das mit dem Vertauschen der Farben??

Ist das nicht sehr langsam?? Confused
_________________
erare humanum est
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Kampfhund
Super JLI'ler


Alter: 41
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 26.07.2002, 17:00    Titel: Antworten mit Zitat

jo, das ist langsam aber ich verändere die farbe ja nur einemal.
Ich speichere das verändrete Surface mit dem alten namen(also dem dateinamen)und hänge den hexadezimalwert für die farbe hinten dran.

also:

fonts/default.bmp

soll blau werden

fonts/default.bmpFF
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Wicky
Junior JLI'ler



Anmeldedatum: 20.07.2002
Beiträge: 50
Wohnort: Ebermannstadt
Medaillen: Keine

BeitragVerfasst am: 26.07.2002, 17:06    Titel: Antworten mit Zitat

Ach so! Dann geht's ja. Ich dachte zuerst, dass du das Bild bei jedem Zeichenvorgang neu umwandelst.
_________________
erare humanum est
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 30.07.2002, 13:21    Titel: jaja Antworten mit Zitat

Sowas hab ich mir schon gedacht, aber ich wußte es nicht genau...

mach's doch einfach mit den ColorKeys!!! Smile

Geht viel einfacher und schneller!!! Very Happy

Ich hab's auch erst bemerkt, als ich's in nem 1seitigen Tutorials gelesen hab....der Christian hat das im Buch ziemlich schlecht erklärt...oder sagen wir viel zu ungenau... Sad

Cu TheMillenium
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 41
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 30.07.2002, 13:28    Titel: Antworten mit Zitat

mit dem colorkey wirds wohl leider auch nicht gehen, da ja die farbe, die ich ersetzen will verändert wird. ich müsste dann schon einen farbbereich als colorkey angeben.

Aber ich habe es ja inzwischen schon anders gelöst.
Und zwar ersetze ich halt alle graustufen durch die angegebene farbe.
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