alphaBlendについて – プログラミング – Home

通知
すべてクリア

[解決済] alphaBlendについて


TKO
 TKO
(@TKO)
ゲスト
結合: 15年前
投稿: 38
Topic starter  

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;
}

よろしくお願いします


引用未解決
トピックタグ
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

使用しているBMPが32ビットカラーなら、

blendFunction.AlphaFormat = AC_SRC_ALPHA;

で、試してみてください


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

足りない部分を補いつつ、以下のコードで動作しました。

元々、関数内で、
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;
}


返信引用
TKO
 TKO
(@TKO)
ゲスト
結合: 15年前
投稿: 38
Topic starter  

DeleteObject(hBitmap);
消したらできましたありがとうございます


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました