android-在图像上绘制文本

android-在图像上绘制文本,第1张

概述我正在尝试使用以下代码在图像绘制文本:procedureTfMain.TextToImage(constAText:string;constAImage:TImage);beginifNOTAssigned(AImage)thenExit;AImage.Canvas.BeginScene;AImage.Canvas.Font.Size:=18;AImage.Canvas.Font.Family:='Ari

我正在尝试使用以下代码在图像上绘制文本:

procedure TfMain.TextToImage(const AText: string; const aimage: timage);begin  if NOT Assigned(aimage) then Exit;      aimage.Canvas.BeginScene;  aimage.Canvas.Font.Size    := 18;  aimage.Canvas.Font.Family  := 'Arial';  aimage.Canvas.Fill.color   := TAlphacolorRec.Dodgerblue;  aimage.Canvas.Font.Style   := [TFontStyle.fsbold];  aimage.Canvas.FillText( aimage.absoluteRect,                          AText,                          False,                          1,                          [TFillTextFlag.RightToleft],                          TTextAlign.taCenter,                          TTextAlign.taCenter);  aimage.Canvas.EndScene;end;

问:为什么以上过程可在windows上运行但不能在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);

总结

以上是内存溢出为你收集整理的android-在图像上绘制文本全部内容,希望文章能够帮你解决android-在图像上绘制文本所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1091370.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存