我尝试绘制位图。这在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 //
答案 0 :(得分:3)
此代码在所有平台上都是错误的。
Image.Bitmap.Create (w, h);
在已构造的实例上运行构造函数。你不想那样做。你可能会在某些平台上使用它,但它永远不对。
设置位图尺寸,如下所示:
Image.Bitmap.SetSize(w, h);
您也可以在位图上调用Clear。