HBITMAP CreateBitmapMask( HBITMAP hbmColour, COLORREF crTransparent )
{
HDC hdcMem, hdcMem2;
HBITMAP hbmMask, hbmOld, hbmOld2;
BITMAP bm;
GetObject( hbmColour, sizeof( BITMAP ), & bm );
hbmMask = CreateBitmap( bm.bmWidth, bm.bmHeight, 1, 1, NULL );
hdcMem = CreateCompatibleDC( NULL );
hdcMem2 = CreateCompatibleDC( NULL );
hbmOld =( HBITMAP ) SelectObject( hdcMem, hbmColour );
hbmOld2 =( HBITMAP ) SelectObject( hdcMem2, hbmMask );
SetBkColor( hdcMem, crTransparent );
BitBlt( hdcMem2, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY );
BitBlt( hdcMem, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem2, 0, 0, SRCINVERT );
SelectObject( hdcMem, hbmOld );
SelectObject( hdcMem2, hbmOld2 );
DeleteDC( hdcMem );
DeleteDC( hdcMem2 );
return hbmMask;
}
void Rgrafike( string sc, HWND hwnd, int X, int Y )
{
HBITMAP hbmOld, hbmMaska, hbmObraz;
hbmObraz =( HBITMAP ) LoadImage( NULL, sc.c_str(), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE );
hbmMaska = CreateBitmapMask( hbmObraz, RGB( 0, 255, 0 ) );
HDC hdc = GetDC( hwnd ), hdcNowy = CreateCompatibleDC( hdc );
BITMAP bmInfo;
GetObject( hbmObraz, sizeof( bmInfo ), & bmInfo );
hbmOld =( HBITMAP ) SelectObject( hdcNowy, hbmMaska );
BitBlt( hdc, X, Y, bmInfo.bmWidth, bmInfo.bmHeight, hdcNowy, 0, 0, SRCAND );
SelectObject( hdcNowy, hbmObraz );
BitBlt( hdc, X, Y, bmInfo.bmWidth, bmInfo.bmHeight, hdcNowy, 0, 0, SRCPAINT );
ReleaseDC( hwnd, hdc );
SelectObject( hdcNowy, hbmOld );
DeleteDC( hdcNowy );
DeleteObject( hbmMaska );
DeleteObject( hbmObraz );
}
Gdy zaczynam wyswietlac animacje to obraz zaczyna mi migac.
Chcialbym do powyzszego kodu napisac podwojne buforowanie, niestety nie potrafie tego zrobic. Bylem na tej stronie
ale nic mi to nie pomoglo.
Bardzo prosze o pomoc.