代码在Android和Windows中的行为有所不同

时间:2013-09-29 14:13:38

标签: android delphi graphics bitmap delphi-xe5

我尝试绘制位图。这在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 //

1 个答案:

答案 0 :(得分:3)

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

Image.Bitmap.Create (w, h);

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

设置位图尺寸,如下所示:

Image.Bitmap.SetSize(w, h);    

您也可以在位图上调用Clear。