Сглаживание шрифтов работает с частичной прозрачностью, используя альфа-канал.Поэтому свойства Transparent
и TransparentColor
для TBitmap
неприменимы.
Вы еще не сказали, какую версию C ++ Builder / VCL вы используете, но более современные версии лучше поддерживают частичнуюпрозрачность, чем у некоторых старых.
Чтобы заставить это работать, вам нужно установить PixelFormat
вашего растрового изображения на pf32bit
.Вам также может потребоваться установить AlphaFormat
на afDefined
.
Если вы не можете заставить TBitmap
делать то, что вам нужно, вам придется вернуться к командам GDI, чтобы создать подходящий HBITMAP
.Вы можете по крайней мере присвоить это свойству Handle
TBitmap
, и обычно оттуда все ведет себя.
Обратите внимание, что я не пользователь C ++ Builder, но знаю VCL из Delphi.
ОБНОВЛЕНИЕ
Я попробовал это в Delphi, и у меня сработало следующее:
procedure TForm4.Button1ClickBMP(Sender: TObject);
var
BMP: TBitmap;
fmtRange: TFormatRange;
intPPI, Flags: Integer;
begin
BMP := TBitmap.Create;
Try
BMP.PixelFormat := pf32bit;
BMP.SetSize(RichEdit1.Width, RichEdit1.Height);
FillChar(fmtRange, SizeOf(fmtRange), 0);
with fmtRange do begin
hDC := BMP.Canvas.Handle;
hdcTarget := hDC;
intPPI := Screen.PixelsPerInch;
rc := Rect(
0,
0,
RichEdit1.Width*1440 div intPPI,
RichEdit1.Height*1440 div intPPI
);
rcPage := rc;
chrg.cpMin := 0;
chrg.cpMax := -1;
end;
Flags := 1;
RichEdit1.Perform(EM_FORMATRANGE, Flags, Longint(@fmtRange));
RichEdit1.Perform(EM_FORMATRANGE, 0, 0);
BMP.SaveToFile('c:\desktop\test.bmp');
Finally
FreeAndNil(BMP);
End;
end;
Вывод выглядит так, несколько взорван досм. сглаживание:
Надеюсь, это поможет, потому что, похоже, вы совсем близко!