32ビットのビットマップ(またはビットマップ32)上で32ビットイメージ(アルファチャンネルのPNG)をblitしたいと思います。StretchDIBitsの問題
blingではなく、イメージをブレンドする方法をわかりません。 BitBltの代わりにAlphaBlendを使うのと同じように、この関数を単純なblitの代わりにイメージをブレンドする必要があります。
これは私の例である:
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ではブレンドができません。
アルファブレンディングの概念全体は、ほとんどのGDI関数とは異質です。それはゲームの非常に遅い時にボルトで止められました。 –
真。最後の1年か2年の間に、VCLの 'TCanvas.Draw()'メソッドがビットマップを描画するときに 'AlphaBlend()'を介してアルファブレンディングのサポートを受けました。 –
AlphaBlend関数はメモリ配列の代わりにCanvas.Handle(HDC)を想定しています。それはDDBであり、DIB(Device Independed Bitmap)機能ではありません。私はいくつかのDIBブレンド機能を探しています。 –