frostar@wiki
TransparentAlphaBlt
最終更新:
Bot(ページ名リンク)
-
view
- TransparentAlphaBlt
名前通り、TransparentBltとAlphaBlendを合成した描画関数を作成する。
以下、ソースコード
以下、ソースコード
BOOL TransparentAlphaBlt(
HDC hdcDest,//描画先HDC
int DestX,//描画先長方形左上X座標
int DestY,//描画先長方形左上Y座標
int DestW,//描画先長方形幅
int DestH,//描画先長方形高さ
HDC hdcSrc,//描画元HDC
int SrcX,//描画元長方形左上X座標
int SrcY,//描画元長方形左上Y座標
int SrcW,//描画元長方形幅
int SrcH,//描画元長方形高さ
COLORREF Transparent//透過色
int Alpha//不透明度
){
//論理HDC:TAHdcの作成
BitBlt(TAhdc,0,0,DestW,DestH,hdcDest,DestX,DestY,SRCCOPY);
if(FALSE==TransparentBlt(TAhdc,0,0,DestW,DestH,hdcSrc,SrcX,SrcY,SrcW,SrcH,Transparent)){
DeleteDC(TAhdc);
return FALSE;
}
BLENDFUNCTION AlphaBf;
AlphaBf.BlendOp = AC_SRC_OVER;
AlphaBf.BlendFlags = 0;
AlphaBf.SourceConstantAlpha = Alpha;
AlphaBf.AlphaFormat = 0;
if(FALSE==AlphaBlend(hdcDest,DestX,DestY,DestW,DestH,TAhdc,0,0,DestW,DestH,AlphaBf)){
DeleteDC(TAhdc);
return FALSE;
}
//TAHdc解放
return TRUE;
}
まず、作成したTAHdcにBitBltで描画先HDCの描画範囲を描画する。
そして、その上に透過色合成を行い、それを描画先に半透明合成することで実現。
ある画像に対し、同じ画像を半透明合成するとき、その透明度がいくつであっても、画像は変化しない。
そのため、描画元の画像だけが半透明で合成される。
そして、その上に透過色合成を行い、それを描画先に半透明合成することで実現。
ある画像に対し、同じ画像を半透明合成するとき、その透明度がいくつであっても、画像は変化しない。
そのため、描画元の画像だけが半透明で合成される。









