bool Drawbmp(HWND hwnd,HBITMAP hBitmap ,int alpha, int size)
というビットマップをalpha値と拡大サイズ決めて表示させる関数を作ったのですが
ビットマップが半透明になって表示されません。拡大されてそのまま表示されます
プログラムは以下です
本文でalpha値をだんだん小さくして出てきたビットマップをだんだん消えていくように表示させるプログラムです
for(int i=255;;i--){
Drawbmp(hWnd,hBitmap,i,3);
Sleep(1);
if(i==0)break;
}
以下が関数です
bool Drawbmp(HWND hwnd,HBITMAP hBitmap ,int alpha, int size)
{
HDC hdc;
HDC hmdc;
BITMAP bmp;
int BMP_W, BMP_H;
BLENDFUNCTION blendFunction;
hdc = GetDC(hwnd);
GetObject(hBitmap, sizeof(BITMAP), &bmp);
BMP_W = (int)bmp.bmWidth;
BMP_H = (int)bmp.bmHeight;
hmdc = CreateCompatibleDC(hdc);
SelectObject(hmdc, hBitmap);
SelectObject(hmdc, hBitmap);
blendFunction.BlendOp = AC_SRC_OVER;
blendFunction.BlendFlags = 0;
blendFunction.AlphaFormat = 0;
blendFunction.SourceConstantAlpha = alpha;
FillRgn( hdc, hrgn, hbr);//全面を消す
AlphaBlend(hdc, MyPoint.NowPoint.x-300, MyPoint.NowPoint.y-300,
BMP_W*size, BMP_H*size, hmdc, 0, 0, BMP_W, BMP_H, blendFunction);
DeleteDC(hmdc);
DeleteObject(hBitmap);
ReleaseDC(hwnd, hdc);
return true;
}
よろしくお願いします
使用しているBMPが32ビットカラーなら、
blendFunction.AlphaFormat = AC_SRC_ALPHA;
で、試してみてください
足りない部分を補いつつ、以下のコードで動作しました。
元々、関数内で、
DeleteObject(hBitmap);
していたのが原因ではないかと?
その場合、Drawbmp() 関数呼び出し前に毎回ビットマップをロードし直さねば
なりません。
bool Drawbmp(HWND hwnd,HBITMAP hBitmap ,int alpha, int size)
{
HDC hdc;
HDC hmdc;
BITMAP bmp;
int BMP_W, BMP_H;
BLENDFUNCTION blendFunction;
hdc = GetDC(hwnd);
GetObject(hBitmap, sizeof(BITMAP), &bmp);
BMP_W = (int)bmp.bmWidth;
BMP_H = (int)bmp.bmHeight;
hmdc = CreateCompatibleDC(hdc);
SelectObject(hmdc, hBitmap);
blendFunction.BlendOp = AC_SRC_OVER;
blendFunction.BlendFlags = 0;
blendFunction.AlphaFormat = 0;
blendFunction.SourceConstantAlpha = alpha;
RECT Rect;
GetClientRect(hwnd, &Rect);
FillRect( hdc, &Rect, (HBRUSH)(COLOR_WINDOW+1));
AlphaBlend(hdc, 20, 20,
BMP_W*size, BMP_H*size, hmdc, 0, 0, BMP_W, BMP_H, blendFunction);
DeleteDC(hmdc);
// DeleteObject(hBitmap);
ReleaseDC(hwnd, hdc);
return true;
}
DeleteObject(hBitmap);
消したらできましたありがとうございます