1

我尝试在位图上绘图。这在 Windows 中运行良好,但在 Android 中会产生分段错误(无论如何,这就是 Delphi 所说的,我只是在 Android 上没有看到任何反应)。我有一个移动项目,表单只包含一个 TToolbar、TSpeedButton、两个 TLabel 和一个 TImage。TSpeedButton 点击​​只有一个事件处理程序。

当我注释掉注释下方的所有内容时,代码在 Android 中运行良好。当我尝试使用调试器时,代码可以正常工作到程序结束。没有看到绘图或分段错误。当我让它运行时出现故障。

我究竟做错了什么?

procedure TForm2.Button_DrawClick (Sender: TObject);
var rct: TRectF;
    h, w: Int32;
begin
  h := Trunc (Image.Height);
  w := Trunc (Image.Width);
  Label_Height.Text := IntToStr (h);
  Label_Width .Text := IntToStr (w);
  rct := TRectF.Create(20, 20, w - 20, h - 20);
// can be commented out below //
  Image.Bitmap.Create (w, h);
  if Image.Bitmap.Canvas.BeginScene then
  try
    Image.Bitmap.Canvas.Stroke.Color := $FF0000FF;
    Image.Bitmap.Canvas.StrokeThickness := 3;
    Image.Bitmap.Canvas.DrawEllipse (rct, 20);
    Image.Bitmap.Canvas.Stroke.Color := $FF00FF00;
    Image.Bitmap.Canvas.DrawRect(rct, 0, 0, AllCorners, 40);
  finally
    Image.Bitmap.Canvas.EndScene;
  end; // try..finally
end; // Button_DrawClick //
4

1 回答 1

3

此代码在所有平台上都是错误的。

Image.Bitmap.Create (w, h);

在已经构造的实例上运行构造函数。你不想那样做。你可能会在某些平台上侥幸逃脱,但它永远不对。

像这样设置位图尺寸:

Image.Bitmap.SetSize(w, h);    

您可能还想在位图上调用 Clear。

于 2013-09-29T14:34:02.713 回答