在firemonkey中绘制文本

时间:2013-04-13 07:00:39

标签: delphi firemonkey delphi-xe3

如何在firemonkey应用程序中绘制Bitmap高质量文本?

我的表单中有TImage imgStory名称。

我试过这段代码,但它没有用,imgStory仍然显示空白!

imgStory.Canvas.Stroke.Kind := TBrushKind.bkSolid;
imgStory.Canvas.StrokeThickness := 1;
imgStory.Canvas.Fill.Color := TAlphaColors.Red;
mRect.Create(100, 229, 300, 250);
imgStory.Canvas.FillText(mRect, 'Hello Text!', false, 100, [TFillTextFlag.ftRightToLeft],
TTextAlign.taCenter, TTextAlign.taCenter);

3 个答案:

答案 0 :(得分:3)

因此它的Timage需要首先加载或创建位图,然后在位图上绘图。您还需要绘图命令周围的startscene和endscene。要从文件创建位图:

imgstory.bitmap.createfromfile(filename);

或者你可以创建一个空白的:

imgstory.bitmap.create(width,height);

然后绘图成为:

imgstory.Bitmap.canvas.BeginScene();
imgStory.Bitmap.canvas.Stroke.Kind := TBrushKind.bkSolid;
imgStory.Bitmap.canvas.StrokeThickness := 1;
imgStory.bitmap.Canvas.Fill.Color := TAlphaColors.Red;
mRect.Create(100, 229, 300, 250);
imgStory.bitmap.Canvas.FillText(mRect, 'Hello Text!', false, 100, [TFillTextFlag.ftRightToLeft],
TTextAlign.taCenter, TTextAlign.taCenter);
imgstory.bitmap.Canvas.endscene

答案 1 :(得分:1)

我知道这是一个古老的问题,但我遇到了它,并让它在我的最终工作。这是我的代码。我想也许这就是你设置的方式。我不认为只调用.create()函数而不将输出设置为变量就行了。

Image1.Bitmap.canvas.Stroke.Kind := TBrushKind.bkSolid;
Image1.Bitmap.canvas.StrokeThickness := 1;
Image1.bitmap.Canvas.Fill.Color := TAlphaColors.Red;
Image1.Bitmap.Canvas.Font.Size:=36;
Image1.Bitmap.Canvas.Font.Family:='Arial';
Image1.Bitmap.Canvas.Font.Style:=[TFontStyle.fsbold];
ARect := TRectF.Create(100, 229, 400, 270);
Image1.Bitmap.Canvas.BeginScene;
Image1.Bitmap.Canvas.FillText(ARect, 'Hello Text!', false, 100, [], TTextAlign.taCenter);
Image1.Bitmap.Canvas.EndScene;

答案 2 :(得分:0)

当您使用paint方法而不是paint方法绘制画布时,需要使用startscene和endscene包围绘图命令。

在代码之前添加一行:

imgStory.canvas.beginscene;

并在您的代码之后:

imgStory.canvas.endscene;