Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 24.07.2002, 13:04 Titel: Eine farbe eines Surfaces verändern |
|
|
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 |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 24.07.2002, 17:54 Titel: |
|
|
liegt wohl am Anti Aliasing |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 24.07.2002, 18:04 Titel: |
|
|
aber irgendwie kann das auch nicht sein, von weiß auf weiß muss er doch nicht überblenden. |
|
Nach oben |
|
|
Michael JLI'ler
Anmeldedatum: 20.07.2002 Beiträge: 173 Wohnort: Münster / NRW Medaillen: Keine
|
Verfasst am: 25.07.2002, 07:39 Titel: |
|
|
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 |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 26.07.2002, 14:30 Titel: |
|
|
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 |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 26.07.2002, 14:38 Titel: |
|
|
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 |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 26.07.2002, 14:40 Titel: |
|
|
hmm, ich habe es aber hazel geschick und bei ihm scheint es funktioniert zu haben. |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 26.07.2002, 14:51 Titel: |
|
|
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 |
|
|
Michael JLI'ler
Anmeldedatum: 20.07.2002 Beiträge: 173 Wohnort: Münster / NRW Medaillen: Keine
|
Verfasst am: 26.07.2002, 15:23 Titel: |
|
|
nur mal so: wofür verwendest du diese funktion? _________________ Es geht auch ohne |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 26.07.2002, 15:39 Titel: |
|
|
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 |
|
|
Wicky Junior JLI'ler
Anmeldedatum: 20.07.2002 Beiträge: 50 Wohnort: Ebermannstadt Medaillen: Keine
|
Verfasst am: 26.07.2002, 15:53 Titel: |
|
|
Ähm... Wie schnell geht denn das mit dem Vertauschen der Farben??
Ist das nicht sehr langsam?? _________________ erare humanum est |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 26.07.2002, 16:00 Titel: |
|
|
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 |
|
|
Wicky Junior JLI'ler
Anmeldedatum: 20.07.2002 Beiträge: 50 Wohnort: Ebermannstadt Medaillen: Keine
|
Verfasst am: 26.07.2002, 16:06 Titel: |
|
|
Ach so! Dann geht's ja. Ich dachte zuerst, dass du das Bild bei jedem Zeichenvorgang neu umwandelst. _________________ erare humanum est |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 30.07.2002, 12:21 Titel: jaja |
|
|
Sowas hab ich mir schon gedacht, aber ich wußte es nicht genau...
mach's doch einfach mit den ColorKeys!!!
Geht viel einfacher und schneller!!!
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...
Cu TheMillenium _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 30.07.2002, 12:28 Titel: |
|
|
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 |
|
|
|