Warum funzt Pixelputten mit Surface->Lock nicht???
-
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