frostar@wiki
TransparentAlphaBlt
最終更新:
frostar
-
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の描画範囲を描画する。
そして、その上に透過色合成を行い、それを描画先に半透明合成することで実現。
ある画像に対し、同じ画像を半透明合成するとき、その透明度がいくつであっても、画像は変化しない。
そのため、描画元の画像だけが半透明で合成される。
そして、その上に透過色合成を行い、それを描画先に半透明合成することで実現。
ある画像に対し、同じ画像を半透明合成するとき、その透明度がいくつであっても、画像は変化しない。
そのため、描画元の画像だけが半透明で合成される。