android绘制文字,android-在图像上绘制文本

尝试直接在timage的TBitmap上绘制,而不是在TImage的Canvas上绘制.

在尝试访问图像之前,还需要创建图像的位图:

AImage.Bitmap := TBitmap.Create(Round(AImage.Width), Round(AImage.Height));

因此正确的代码将如下所示:

procedure TfMain.TextToImage(const AText: string; const AImage: TImage);

begin

if NOT Assigned(AImage) then Exit;

AImage.Bitmap := TBitmap.Create(Round(AImage.Width), Round(AImage.Height));

AImage.Bitmap.Canvas.BeginScene;

try

//....

// Use AImage.Bitmap.Canvas as needed

AImage.Bitmap.Canvas.FillText( AImage.AbsoluteRect,

AText,

False,

1,

[],

TTextAlign.Center,

TTextAlign.Center);

finally

AImage.Bitmap.Canvas.EndScene;

end;

end;

从TImage.Paint事件代码中,您将看到:

procedure TImage.Paint;

var

R: TRectF;

begin

if (csDesigning in ComponentState) and not Locked and not FInPaintTo then

begin

R := LocalRect;

InflateRect(R, -0.5, -0.5);

Canvas.DrawDashRect(R, 0, 0, AllCorners, AbsoluteOpacity, $A0909090);

end;

UpdateCurrentBitmap;

if FCurrentBitmap <> nil then

DrawBitmap(Canvas, LocalRect, FCurrentBitmap, AbsoluteOpacity);

end;

因此,无论您要在画布上绘画什么,在下一次重新绘画时,它将再次绘制完整的位图,从而擦除您已经完成的工作.

如果您不想触摸位图,则需要重写TImage的OnPaint事件并调用函数TextToImage(const AText:string; const AImage:TImage);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值