effe zoeken - heb zulke code (LONG time ago 32Bits->Screen)
edit:
gevonden, maar ik zie dat ik het net iets anders deed (een beetje sneller maar je snapt vast wel hoe je het omzet).
Ik laat windows eerst een bitmap 'aanmaken' voor me en me een pointer meegeven zodat ik direct in die bitmap can werken: ie dus ik maak slechts een keer die bitmap aan en hergebruik die zodat ik niet voor elke frame vanalles moet doen.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| HBITMAP BitmapBuffer; //our BitMap Buffer
int* screen; //where our Bitmap dat WILL Be (ie NOT is)
BITMAPINFO* bmInfo = (BITMAPINFO*)new BYTE[sizeof(BITMAPINFO)+256*4];
bmInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmInfo->bmiHeader.biWidth = xres; //desired width
bmInfo->bmiHeader.biHeight = -yres; //height
bmInfo->bmiHeader.biPlanes = 1; //has to be 1
bmInfo->bmiHeader.biBitCount = 32;
bmInfo->bmiHeader.biCompression = BI_RGB; //uncompressed
bmInfo->bmiHeader.biSizeImage = 0;
bmInfo->bmiHeader.biClrImportant = 0;
bmInfo->bmiHeader.biClrUsed = 0;
bmInfo->bmiHeader.biXPelsPerMeter = 0;
bmInfo->bmiHeader.biYPelsPerMeter = 0;
BitmapBuffer = CreateDIBSection(NULL, bmInfo, DIB_RGB_COLORS, (LPVOID *)&screen, NULL, 0); |
nu heb je dus een bitmap waarmee je direct aan de gang kunt. (ik heb toen een windows en dos versie gemaakt want deze methode hoeft er niets meer gecopierd te worden)
en ik teken als volgt
C++:
1
2
3
4
| bitmapDC = CreateCompatibleDC(hDC); //HDC heb je vast all
SelectObject(bitmapDC, BitmapBuffer);
StretchBlt(hDC,0,0,rc.right,rc.bottom, bitmapDC,0,0,xres,yres,SRCCOPY); //of what BLITTER dan ook)
...//clean up |
deze code gebruik ik nog dagelijks... dus 2000+ compatible.
Als je nou niet windows je mem wil laten maken kun je eventueel wel met een andere BItmap fucntion zeggen welke ie moet doen...
kijk naar CreateBitmapIndirect + BITMAP struct voor hetzelfde.... (meer wat jij wil denk ik)
[
Voor 99% gewijzigd door
hobbit_be op 19-04-2003 15:53
]