D
Also ich bekomm das jetzt so weit hin.
void blit (cImage *img, HDC hDC, int x, int y) {
BITMAPINFO bmi;
HBITMAP DIBSec;
unsigned char *lpdata = new unsigned char[bmi.bmiHeader.biSizeImage];
/* Create Bitmap Header */
ZeroMemory (&bmi.bmiHeader, sizeof(BITMAPINFOHEADER));
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = img->getWidth();
bmi.bmiHeader.biHeight = img->getHeight();
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = img->getBPP() * 8;
bmi.bmiHeader.biSizeImage = img->getBPP() * img->getWidth() * img->getHeight();
/* Create Bitmap */
DIBSec = CreateDIBSection( 0, &bmi, DIB_RGB_COLORS, (void**)lpdata, 0, 0);
SetDIBits (0, DIBSec, 0, bmi.bmiHeader.biHeight, img->getImage(), &bmi, DIB_RGB_COLORS);
/* Blit Image */
HDC iDC = CreateCompatibleDC(hDC);
SelectObject(iDC, DIBSec);
BitBlt(hDC, x, y, img->getWidth(), img->getHeight(), iDC, 0, 0, SRCCOPY );
/* Cleanup */
DeleteObject (DIBSec);
ReleaseDC(0, iDC);
delete lpdata;
}
Das SetDIBits macht scheinbar noch mehr als ein CopyMemory.
Wie dem auch sei, jetzt hab ich doch einen interessanten Effekt.
Ich nehme ein Bild mit einer Webcam auf und stelle es per blit (s.o.) dar.
Das funktioniert super- solange die Maus nicht das Fenster berührt in dem das Ganze stattfindet..
Woran kann sowas liegen?