Na siehste. Geht auch so…
Ich hab mir mal 'ne C+±Puffer-Klasse geschrieben die ein 32-Bit Bitmap der gewünschten Grösse erzeugt. Man hat einen Pointer auf die Bilddaten und kann sie ganz genau wie ein Array benutzen, andererseits kann man auch mit dem zugehörigen DC Windows Blit/AlphaBlend/… -Funktionen benutzen (schneller gehts ja kaum noch, ausser mit DirectX). Ausserdem hat man dann sozusagen einen Hintergrund-Puffer zur Verfügung.
Die Innereien sehen grundsätzlich so aus :
int \* colorBuffer; //a 32Bit color-buffer (the image)
BITMAPINFO bitmapinfo;
HBITMAP bitmap;
HDC dc;
//Set up windows bitmap stuff
this-\>bitmapinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
this-\>bitmapinfo.bmiHeader.biWidth = width;
this-\>bitmapinfo.bmiHeader.biHeight = -height; /\* top-down \*/
this-\>bitmapinfo.bmiHeader.biPlanes = 1;
this-\>bitmapinfo.bmiHeader.biBitCount = 32;
this-\>bitmapinfo.bmiHeader.biCompression = BI\_RGB;
this-\>bitmapinfo.bmiHeader.biSizeImage = width \* height \* sizeof(int);
this-\>bitmapinfo.bmiHeader.biXPelsPerMeter = 0;
this-\>bitmapinfo.bmiHeader.biYPelsPerMeter = 0;
this-\>bitmapinfo.bmiHeader.biClrUsed = 0;
this-\>bitmapinfo.bmiHeader.biClrImportant = 0;
this-\>dc = CreateCompatibleDC(NULL); //sollte danach != NULL sein...
this-\>bitmap = CreateDIBSection(this-\>dc, &bitmapinfo, DIB\_RGB\_COLORS, reinterpret\_cast (&colorBuffer), 0, 0);
SelectObject(this-\>dc, this-\>bitmap);
Windows besorgt sogar die Speicherreservierung für uns…
Jetzt kann man z.B. mit :
void blitTo(HDC hDC, DWORD operation)
{
BitBlt(hDC, 0, 0, width, height, dc, 0, 0, operation);
}
//oder
void stretchAlphaBlendTo(HDC hDC, bool perPixelAlpha, unsigned char sourceAlpha, int hwidth, int hheight)
{
//define constants for ALPHABLEND
BLENDFUNCTION bf;
bf.AlphaFormat = AC\_SRC\_OVER;
bf.BlendFlags = 0;
if (perPixelAlpha) {
bf.BlendOp = AC\_SRC\_ALPHA; //possible values are : AC\_SRC\_ALPHA or AC\_SRC\_OVER
bf.SourceConstantAlpha = 255; //if AC\_SRC\_ALPHA, we need to set this to 255 to get per-pixel-alpha
}
else {
bf.BlendOp = AC\_SRC\_OVER;
bf.SourceConstantAlpha = sourceAlpha;
}
int oldMode = SetStretchBltMode(hDC, COLORONCOLOR);
AlphaBlend(hDC, 0, 0, hwidth, hheight, dc, 0, 0, width, height, bf);
SetStretchBltMode(hDC, oldMode);
}
arbeiten. auch alle Funktionen die für Bitmaps funktionieren können über „bitmap“ verwendet werden…
Am ende :
DeleteDC(dc);
DeleteObject(bitmap);
Falls jemand sowas mal brauchen sollte… 
KIM