ik ben een proggie aan het bouwen dat (uiteindelijk) transparante (met alpha-layers) windows moet gaan tekenen.
Ik wil eerst het scherm (of een deel ervan) 'captureren' in mijn eigen bitmap_32b class. En dan wat bewerkingen uitvoeren en dat weer wegschrijven naar het scherm.
Het wegschrijven is geen probleem, dat gaat met deze regel:
SetDIBitsToDevice(appDC, r.x, r.y, r.w, r.h, 0, 0, 0, r.h, Buf, &BmpInfo, DIB_RGB_COLORS);
in deze functie:
Gaat allemaal perfect en vooral lekker snel!!
Maar er is niet zoiets als GetDIBitsFromDevice, die heb ik wel nodig. Ik wil namelijk de pixels van het scherm direct (of via een buffer) in mijn bitmap_32b class hebben. Zodat ik daar mee kan gaan rekenen, voor de transparantie.
voor de duidelijkheid:
iemand enig idee hoe ik al die mooie pixels van het scherm in mijn bitmap_32b class krijg
Ik wil eerst het scherm (of een deel ervan) 'captureren' in mijn eigen bitmap_32b class. En dan wat bewerkingen uitvoeren en dat weer wegschrijven naar het scherm.
Het wegschrijven is geen probleem, dat gaat met deze regel:
SetDIBitsToDevice(appDC, r.x, r.y, r.w, r.h, 0, 0, 0, r.h, Buf, &BmpInfo, DIB_RGB_COLORS);
in deze functie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| void DrawBitmap(bitmap_32b *bmp, rect r)
{
clr_32b clr;
LONG x, y;
BITMAPINFO BmpInfo;
r = bmp->geom().clip_r(r);
BmpInfo.bmiHeader.biSize = sizeof(BITMAPINFO);
BmpInfo.bmiHeader.biWidth = r.w;
BmpInfo.bmiHeader.biHeight = r.h;
BmpInfo.bmiHeader.biPlanes = 1;
BmpInfo.bmiHeader.biBitCount = 32;
BmpInfo.bmiHeader.biCompression = BI_RGB;
BmpInfo.bmiHeader.biSizeImage = 0;
BmpInfo.bmiHeader.biXPelsPerMeter = 0;
BmpInfo.bmiHeader.biYPelsPerMeter = 0;
BmpInfo.bmiHeader.biClrUsed = 0;
BmpInfo.bmiHeader.biClrImportant = 0;
SetDIBitsToDevice(appDC, r.x, r.y, r.w, r.h, 0, 0, 0, r.h, bmp->buf, &BmpInfo, DIB_RGB_COLORS);
} |
Gaat allemaal perfect en vooral lekker snel!!
Maar er is niet zoiets als GetDIBitsFromDevice, die heb ik wel nodig. Ik wil namelijk de pixels van het scherm direct (of via een buffer) in mijn bitmap_32b class hebben. Zodat ik daar mee kan gaan rekenen, voor de transparantie.
voor de duidelijkheid:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| typedef byte clr_8b;
class clr_32b
{
public:
clr_8b blue;
clr_8b green;
clr_8b red;
clr_8b alpha;
};
class bitmap_32b
{
public:
dword type;
clr_32b *buf;
dword width;
dword height;
}; |
iemand enig idee hoe ik al die mooie pixels van het scherm in mijn bitmap_32b class krijg
edit:
(ff aanpassing gedaan van 24 naar 32 bits, is minder source
(ff aanpassing gedaan van 24 naar 32 bits, is minder source