32 ビット イメージ (アルファ チャネル付きの PNG) を 32 ビット ビットマップ (または Bitmap32) にブリットしたいと考えています。
イメージをブライトする代わりにブレンドするように関数に指示する方法がわかりません。BitBlt の代わりに AlphaBlend を使用するように、単純なブリットではなく画像をブレンドするためにこの関数を作成する必要があります。
これは私の例です:
ABitmap は TBitmap32 (GR32) のタイプですが、32 ビット パレットの通常の TBitmap でも同じ結果になります。
ABitmap.SetSize(GetWidth, GetHeight);
SetStretchBltMode(ABitmap.Handle, COLORONCOLOR);//HALFTONE);
ABitmap.Clear($FFFFFFFF); { Here I try to erase background with white color, so that new image is blit over white surface }
StretchDIBits(
ABitmap.Handle,
0, 0,
GetWidth, GetHeight,
0, 0,
GetWidth, GetHeight,
FreeImage_GetBits(Dib),
FreeImage_GetInfo(Dib)^,
DIB_RGB_COLORS,
SRCCOPY); // --- SRCAND etc. produce not good results
FreeImage_GetBits と FreeImage_GetInfo は、ビット配列の先頭と構造体を指す FreeImage ライブラリ関数です。
私が何をしても、StretchDBit はブレンドを許可しません。