![]() |
FMX Problem bei Textausgabe auf Bitmap
Guten Abend,
ich möchte in meiner FMX App eine Graphik zunächst in einer Bitmap als Doublebuffer erstellen und diese dann auf den Canvas einer Paintbox zeichnen. Leider wird der Text aus meiner Bitmap nicht so gestochen scharf auf dem Bildschirm meines Samsung Android Tabletts dargestellt als wenn ich den Text direkt auf den Canvas der Paintbox ausgebe. Ich gehe davon aus, dass es mit dem Skalierungsfaktor 2 zusammenhängt, der auf dem Tablett angewendet wird.
Delphi-Quellcode:
Vielleicht hat ja jemand Zeit und Lust, mir die Lösung des Problems zu verraten.
procedure TfrmMain.PtBoxPaint(Sender: TObject; Canvas: TCanvas);
Var Bmp:TBitmap; SrcRc,TxtRc:TRectF; begin Canvas.Font.Size:=30; Bmp:=TBitmap.Create(Trunc(PtBox.Width),Trunc(PtBox.Height)); Bmp.Canvas.BeginScene; Bmp.Canvas.Fill.Color:=TAlphaColors.Black; Bmp.Canvas.Font.Assign(Canvas.Font); TxtRc:=TRectF.Create(10,10,PtBox.Width,PtBox.Height); Bmp.Canvas.Stroke.Kind:=TBrushKind.None; Bmp.Canvas.FillText(TxtRc, 'Testtest', false, 1, [], TTextAlign.Leading, TTextAlign.Leading); Bmp.Canvas.EndScene; SrcRc:=TRectF.Create(0,0,Bmp.Width,Bmp.Height); Canvas.DrawBitmap(Bmp, SrcRc, SrcRc, 1); TxtRc:=TRectF.Create(10,35,PtBox.Width,PtBox.Height); Canvas.Fill.Color:=TAlphaColors.Black; Canvas.FillText(TxtRc, 'Testtest', false, 1, [], TTextAlign.Leading, TTextAlign.Leading); Bmp.Free; end; |
AW: FMX Problem bei Textausgabe auf Bitmap
Ein paar Anregungen könnten
![]() Zitat:
Delphi-Quellcode:
function DrawAdvertBitmap: Tbitmap;
var aBitmapAliased: Tbitmap; begin aBitmapAliased := Tbitmap.Create(trunc(FWidth * fScreenScale) * 2, trunc(FHeight * fScreenScale) * 2); try aBitmapAliased.Canvas.BeginScene; try aBitmapAliased.canvas.Clear(0); aBitmapAliased.canvas.Fill.Color := $ff000000; aBitmapAliased.Canvas.Fill.Kind := TbrushKind.Solid; aBitmapAliased.Canvas.FillRect(...); aBitmapAliased.Canvas.Fill.Color := $ff333844; aBitmapAliased.Canvas.Font.Family := 'Roboto-Bold'; aBitmapAliased.Canvas.Font.Size := 12 * fScreenScale * 2; aBitmapAliased.Canvas.Font.Style := [TFontStyle.fsBold]; aBitmapAliased.Canvas.FillText(...); finally aBitmapAliased.Canvas.EndScene; end; //reduce by 2 to make antialiased result := Tbitmap.Create(trunc(FWidth * fScreenScale), trunc(FHeight * fScreenScale)); try result.Canvas.BeginScene; try result.Canvas.Clear(0); result.Canvas.DrawBitmap(aBitmapAliased,...); finally result.Canvas.EndScene; end; except result.Free; raise; end; result.BitmapScale := fScreenScale; finally aBitmapAliased.free; end; end; Zitat:
|
AW: FMX Problem bei Textausgabe auf Bitmap
Vielen Dank, ich konnte mir gerade die Lösung über ein Image mit einer Multiresbitmap erschließen. Auf der Bitmap des Image funktioniert die Textausgabe. Bitmapscale ist das Zauberwort. Hier meine Lösung. Beide Textausgaben sind jetzt 100% identisch :)
Delphi-Quellcode:
procedure TfrmMain.PtBoxPaint(Sender: TObject; Canvas: TCanvas);
Var Bmp:TBitmap; SrcRc,TxtRc,DstRc:TRectF; begin Canvas.Font.Size:=30; Bmp:=TBitmap.Create(1,1); Bmp.BitmapScale:=Canvas.Scale; // Damit Bmp.Canvas.Scale entsprechend BitmapScale gesetzt wird: Bmp.SetSize(Trunc(PtBox.Width*Canvas.Scale),Trunc(PtBox.Height*Canvas.Scale)); Bmp.Clear(TAlphaColors.White); Bmp.Canvas.BeginScene; Bmp.Canvas.Fill.Color:=TAlphaColors.Black; Bmp.Canvas.Font.Assign(Canvas.Font); TxtRc:=TRectF.Create(10,10,PtBox.Width,PtBox.Height); Bmp.Canvas.FillText(TxtRc, 'Testtest', false, 1, [], TTextAlign.Leading, TTextAlign.Leading); Bmp.Canvas.HorzLine(0,100,50); // Aus Classhelper Bmp.Canvas.VertLine(0,100,50); // Aus Classhelper Bmp.Canvas.EndScene; SrcRc:=TRectF.Create(0,0,Bmp.Width,Bmp.Height); DstRc:=TRectF.Create(0,0,PtBox.Width,PtBox.Height); Canvas.DrawBitmap(Bmp, SrcRc, DstRc, 1); TxtRc:=TRectF.Create(10,35,PtBox.Width,PtBox.Height); Canvas.Fill.Color:=TAlphaColors.Black; Canvas.FillText(TxtRc, 'Testtest', false, 1, [], TTextAlign.Leading, TTextAlign.Leading); Bmp.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz