Warum funzt Pixelputten mit Surface->Lock nicht???
-
He, es funzt http://www.c-plusplus.net/ubb/ubb/smile.gif http://www.c-plusplus.net/ubb/ubb/smile.gif http://www.c-plusplus.net/ubb/ubb/smile.gif !!! Es lag tatsächlich an dem fehlenden ZeroMemory, etc. Ich dachte die ganze Zeit, das wäre nur eine Sicherheitsmaßname, damit die Struktur nur mit nullen initialisiert wird und nicht irgendwelche zufällige Werte hat. Das ich aber auch nie auf die Idee gekommen bin, das dazuzuschreiben, so wie es in den meisten Tutorials steht http://www.c-plusplus.net/ubb/ubb/rolleyes.gif ...
Bei der ganzen Sache gibt es nur noch ein Problem: Die Farbzuweisung!!! Ich rechne das mit folgendem Makro:
#define rgb(r,g,b) = b|(g<<5)|(r<<11), wobei r, g und b für rot grün und blau stehen.
Wenn ich jetzt "reine" Farben (also rot[255,0,0], grün[0,255,0], blau[0,0,255] oder weiß[255,255,255]) nehme, dann funzt das. Wenn ich allerdings z.B. hellgelb[255,255,100] nehme, dann bekomme ich ganz seltsame Farben, woran liegt das???PS: dieses Vram[x+yZeilenBreite]* muss bei mir (800x600x16) so heißen, damit es funzt: Vram[x+yZeilenBreite/2]*
------------------
Mfg, D@nm@n
-
Hallo,
ZeroMemory: siehe hierzu http://www.c-plusplus.net/ubb/ubb/Forum7/HTML/000688.html
http://www.c-plusplus.net/ubb/ubb/wink.gifCU
-
Genau daher hab' ich's doch http://www.c-plusplus.net/ubb/ubb/biggrin.gif http://www.c-plusplus.net/ubb/ubb/biggrin.gif http://www.c-plusplus.net/ubb/ubb/biggrin.gif !!!
------------------
Mfg, D@nm@n
-
Code:
convertRGBToColorModel(WORD wRed,
WORD wGreen, WORD wBlue)
{
DWORD dwRed; DWORD dwGreen; DWORD dwBlue; WORD wBits; DWORD dwMask; // Rot wBits=1; dwMask = dwMaskRed; while (dwMask=dwMask>>1) { wBits++; } dwRed = DWORD (wRed) << wBits; // Gruen wBits = 1; dwMask = dwMaskGreen; while (dwMask=dwMask>>1) { wBits++; } dwGreen = DWORD (wGreen) << wBits; // Blau wBits = 1; dwMask = dwMaskBlue; while (dwMask=dwMask>>1) { wBits++; } dwBlue = DWORD (wBlue) << wBits; return (((dwRed>>8)&dwMaskRed) | ((dwGreen>>8)&dwMaskGreen) | ((dwBlue>>8)&dwMaskBlue));
}
[/code]
die Masken bekommt man mit irgenwelchen DX-fkts, schau mal in die Doku...
-
Danke http://www.c-plusplus.net/ubb/ubb/smile.gif, nur geht das nicht einfacher (= ohne eigene Fkt), zum Beispiel mit einem Makro?
------------------
Mfg, D@nm@n
-
Du kannst auch Dein Makro weiterverwenden, nur solltet Du beachten, daß in einem 16 Bit Farbmodus nicht für jeden Farbanteil 256 Abstufungen(8 Bit) existieren. Du solltest Dich einfach auf die Bereiche von 0 bis 31 bzw. bei 565 auf 0 bis 31, 0 bis 63, 0 bis 31 beschränken.
Oder Du schreibst Dir noch eine Funktion die's umrechnet... Aber di hatten wir ja schon!
CU
-
Zitat:
Original erstellt von D@nm@n:
**Danke http://www.c-plusplus.net/ubb/ubb/smile.gif, nur geht das nicht einfacher (= ohne eigene Fkt), zum Beispiel mit einem Makro?**
weiss nich, obs einfacher geht, ich weiss nur, das ich das Teil so geschreiben hab, das es in allen Farbmodi funzt...
-
Also ich find Makros NICHT einfacher als Funktionen! Du hast NULL Typsicherheit und debuggen kannst du's nur extrem schwer!
-
Tja, das ist deine Meinung! Ich hab' zwischenzeitlich in jedem Fall ein vollständig funzendes Makro gefunden! Das sieht so aus:
#define rgb(r,g,b) (((r>>3)<<11)+((g>>2)<<5)+(b>>3))
Hier nochmal meine Fkt. (für alle die's interessiert):
Code:
WORD *buffer;
DDSURFACEDESC ddsd;
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
if (lpDDSurface->Lock(NULL,&ddsd,DDLOCK_SURFACEMEMORYPTR|DDLOCK_WAIT,NULL) == DD_OK)
{
buffer = (WORD*)ddsd.lpSurface;
buffer[x+y*ddsd.lPitch/2] = rgb(r,g,b);
(WORD*)ddsd.lpSurface = buffer;
lpDDSurface->Unlock(NULL);
}[/code]
So, jetzt kann von mir aus jeder nochmal seinen Senf dazu geben, diese Methode funzt wunderbar bei mir, und damit bin ich zufrieden! Trotzdem nochmal total vielen Dank an alle, die mir geholfen haben (oder es zumindest versucht haben). So ein ewig langes Posting und Monate voll Frust nur wegen eines vergessenen ddsd.dwSize = sizeof(ddsd); http://www.c-plusplus.net/ubb/ubb/redface.gif. Naja, jetzt funzt's ja http://www.c-plusplus.net/ubb/ubb/smile.gif http://www.c-plusplus.net/ubb/ubb/smile.gif http://www.c-plusplus.net/ubb/ubb/smile.gif http://www.c-plusplus.net/ubb/ubb/smile.gif http://www.c-plusplus.net/ubb/ubb/smile.gif http://www.c-plusplus.net/ubb/ubb/smile.gif http://www.c-plusplus.net/ubb/ubb/smile.gif http://www.c-plusplus.net/ubb/ubb/smile.gif !!!
------------------
Mfg, D@nm@n
-
Aber was passiert, wenn nicht der 565 -colormode läuft ?!?
-
Ja, schon klar, dass das dann nicht funzt, aber lies dazu mal mein Posting in Crax' Thread (mit den Colorkeys)! Das mit dem Makro habe ich zu mindest mehr oder weniger kapiert, deine Fkt. ist mir (noch) zu viel. Mir ist schon klar, dass die finale Version meines Proggies so nicht bleiben kann, aber im Moment soll's ausreichen. Nicht böse sein http://www.c-plusplus.net/ubb/ubb/biggrin.gif http://www.c-plusplus.net/ubb/ubb/biggrin.gif http://www.c-plusplus.net/ubb/ubb/biggrin.gif http://www.c-plusplus.net/ubb/ubb/biggrin.gif !
------------------
Mfg, D@nm@n