Witam,

Mam 2 BMP 32-bitowe:

  • BMP1 to jakiś obraz / gradient.
  • BMP2 to czysta bitmapa (białe tło), wszystkie alfy na 0.

Ustawiam BMP2 przezroczyste tło:

SetBkMode(BMP2->Canvas->Handle, TRANSPARENT);
// lub
BMP2->Canvas->Brush->Style = bsClear;

Ustawiam czcionkę i kolor czcionki. Wklejam tekst - DrawText.

Wklejam BMP2 do BMP1. Problemy:
1 - DrawText (TextOut..) na BMP2 wkleja tekst nie zmieniając alfy pikseli - no to zmieniam ręcznie: dla każdego piksela, jeśli wartość różna od białego (lub innego koloru ustawionego jako tło - różnego oczywiście od koloru tekstu) ustawiam alfe na max(R, max(G, B)) i przeliczam np: R = MulDiv(R, alfa, 255),
2 - Wklejam BMP2 do BMP1 używając AlphaBlend z BLENDFUNCTION.AlphaFormat = AC_SRC_ALPHA i BLENDFUNCTION.SourceConstantAlpha = 0do255 i TU jest największy problem - piksele z tekstu, które biorą udział w AA, wyraźnie się odznaczają.

Żeby nie było - czytałem:
http://4programmers.net/Delphi/Gotowce/Funkcja_Canvas.Draw_ze_stopniem_przeźroczystości_bitmapy_i_obsługą_przeźroczystego_koloru
I tam widać właśnie wyrażnie o co mi chodzi: Duszek na rysunku u góry ma białawe piksele na obrysie. Na rysunku na dole przy wklejeniu z taką przezroczystością widać je słabo, ale jakby duszek miał być bardziej widoczny, białe piksele obrysu będą znacznie bardziej widoczne.

Jak się tego pozbyć we wklejanym tekście??