Я реализовал прототип, но он не работает нормально, поэтому в коде может быть что-то не так. Я делюсь этим здесь с надеждой, что мы сможем исправить это вместе:
BOOL HasAlphaChannel( HBITMAP hBmp )
{
HDC hDC = CreateCompatibleDC( NULL );
BITMAPINFO bmi;
void * bits;
unsigned long ul;
BOOL bAlphaChannel = FALSE;
memset( &bmi, 0, sizeof( BITMAPINFO ) );
bmi.bmiHeader.biSize = sizeof( BITMAPINFOHEADER );
GetDIBits( hDC, hBmp, 0, 1, NULL, &bmi, DIB_RGB_COLORS );
bits = malloc( bmi.bmiHeader.biSizeImage );
// this is returning zero wich means error (why???)
GetDIBits( hDC, hBmp, 0, bmi.bmiHeader.biHeight, &bits, &bmi, DIB_RGB_COLORS );
for( ul = 0; ul < bmi.bmiHeader.biSizeImage; ul += 4 )
if( ( ( char * ) bits )[ ul + 3 ] != 0 )
bAlphaChannel = TRUE;
free( bits );
DeleteDC( hDC );
return bAlphaChannel;
}
Спасибо! * * 1004