Искам да направя 32-битово изображение (PNG с алфа канал) върху 32-битово растерно изображение (или Bitmap32).
Не знам как да кажа на функцията да смеси изображението, вместо да го бледи. Подобно на използването на AlphaBlend вместо BitBlt, трябва да накарам тази функция да смесва изображение вместо обикновен блит.
Това е моят пример:
ABitmap е тип TBitmap32 (GR32), но същият резултат е с обикновен TBitmap с 32-битова палитра.
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 не позволява смесване.