mirror of
https://github.com/VincentWei/MiniGUI.git
synced 2025-05-10 08:40:41 +08:00
89 lines
2.9 KiB
C
89 lines
2.9 KiB
C
{
|
|
int tox = 800, toy = 800;
|
|
int count;
|
|
BITMAP bitmap;
|
|
unsigned int start_tick, end_tick;
|
|
|
|
/* Load the bitmap from the file. */
|
|
if (LoadBitmap (hdc, &bitmap, "res/icon.bmp"))
|
|
return;
|
|
|
|
bitmap.bmType = BMP_TYPE_ALPHACHANNEL;
|
|
|
|
/* Fill a box with the bitmap with alpha channel. */
|
|
start_tick = GetTickCount ();
|
|
count = 1000;
|
|
while (count--) {
|
|
tox = rand() % 800;
|
|
toy = rand() % 800;
|
|
|
|
/* Set a random alpha channel. */
|
|
bitmap.bmAlpha = rand() % 256;
|
|
/* Fill the box. */
|
|
FillBoxWithBitmap (hdc, tox, toy, 0, 0, &bitmap);
|
|
}
|
|
end_tick = GetTickCount ();
|
|
TellSpeed (hwnd, start_tick, end_tick, "Alpha Blended Bitmap", 1000);
|
|
|
|
bitmap.bmType = BMP_TYPE_ALPHACHANNEL | BMP_TYPE_COLORKEY;
|
|
/* Set the color key (the transparent pixel) of the bitmap. */
|
|
bitmap.bmColorKey = GetPixelInBitmap (&bitmap, 0, 0);
|
|
|
|
/* Fill a box with the bitmap with alpha channel and color key. */
|
|
start_tick = GetTickCount ();
|
|
count = 1000;
|
|
while (count--) {
|
|
tox = rand() % 800;
|
|
toy = rand() % 800;
|
|
|
|
/* Set a random alpha channel. */
|
|
bitmap.bmAlpha = rand() % 256;
|
|
/* Fill the box. */
|
|
FillBoxWithBitmap (hdc, tox, toy, 0, 0, &bitmap);
|
|
}
|
|
end_tick = GetTickCount ();
|
|
TellSpeed (hwnd, start_tick, end_tick, "Alpha Blended Transparent Bitmap", 1000);
|
|
|
|
UnloadBitmap (&bitmap);
|
|
}
|
|
|
|
{
|
|
/* Create a memory DC which hanve alpha per-pixel. */
|
|
mem_dc = CreateMemDC (400, 100, 16, MEMDC_FLAG_HWSURFACE | MEMDC_FLAG_SRCALPHA,
|
|
0x0000F000, 0x00000F00, 0x000000F0, 0x0000000F);
|
|
|
|
/* Set brush color and fill a box. */
|
|
SetBrushColor (mem_dc, RGBA2Pixel (mem_dc, 0xFF, 0xFF, 0x00, 0xFF));
|
|
FillBox (mem_dc, 0, 0, 200, 50);
|
|
|
|
/* Set another brush color and fill a box */
|
|
SetBrushColor (mem_dc, RGBA2Pixel (mem_dc, 0xFF, 0xFF, 0x00, 0x40));
|
|
FillBox (mem_dc, 200, 0, 200, 50);
|
|
|
|
/* Set another brush color and fill a box */
|
|
SetBrushColor (mem_dc, RGBA2Pixel (mem_dc, 0xFF, 0xFF, 0x00, 0x80));
|
|
FillBox (mem_dc, 0, 50, 200, 50);
|
|
|
|
/* Set another brush color and fill a box */
|
|
SetBrushColor (mem_dc, RGBA2Pixel (mem_dc, 0xFF, 0xFF, 0x00, 0xC0));
|
|
FillBox (mem_dc, 200, 50, 200, 50);
|
|
SetBkMode (mem_dc, BM_TRANSPARENT);
|
|
|
|
/* Set a text color and output the text */
|
|
SetTextColor (mem_dc, RGBA2Pixel (mem_dc, 0x00, 0x00, 0x00, 0x80));
|
|
TabbedTextOut (mem_dc, 0, 0, "Memory DC with alpha.\n"
|
|
"The source DC have alpha per-pixel.");
|
|
|
|
/* Blitting to a client DC. */
|
|
start_tick = GetTickCount ();
|
|
count = 100;
|
|
while (count--) {
|
|
BitBlt (mem_dc, 0, 0, 400, 100, hdc, rand () % 800, rand () % 800);
|
|
}
|
|
end_tick = GetTickCount ();
|
|
TellSpeed (hwnd, start_tick, end_tick, "Alpha Blit", 100);
|
|
|
|
/* delete the momory DC. */
|
|
DeleteMemDC (mem_dc);
|
|
}
|