【发布时间】:2019-03-23 13:45:09
【问题描述】:
我正在使用 FireMonkey 和 Delphi 制作简单的绘图应用程序。它真正做的只是画线和椭圆。这是代码:
Image1.Bitmap.Canvas.BeginScene;
with Form1 do begin
for i := 0 to 360 do
if (i mod 15)=0 then
begin
p1 := TPointF.Create(PX, PY);
p2 := TPointF.Create(Round(PX+200*sin(i*pi/180)), Round(PY+200*cos(i*pi/180)));
Image1.Bitmap.Canvas.DrawLine(p1, p2, 100);
end;
for i := 0 to 200 do
if (i mod 20)=0 then
begin
prst1 := TRectF.Create(PX+i,PY+i,PX-i,PY-i);
Image1.Bitmap.Canvas.DrawEllipse(prst1, 100);
end;
Image1.Bitmap.Canvas.EndScene;
end;
当我在 Win32 或 Win64 下编译此代码时,它可以完美运行。但是当我尝试编译它并在 Android 设备上运行时,只显示行,并且省略了省略号。有谁知道为什么会这样?
提前感谢您的帮助!
【问题讨论】:
-
在图像控件中绘图并不是在屏幕上绘图的正确方法。尝试从表单的
OnPaint事件处理程序中直接在表单画布上绘图。 -
请始终提供变量初始化和类型等详细信息。例如。
PX和PY在进入时有什么价值?如果它们恰好是 123456 怎么办?代码的上下文是什么?事件处理程序?你定义的方法?brush和stroke属性值是什么?额外问题:完全不透明线的不透明度值是多少? -
@TomBrunberg 对不起。
PX和PY都是 200,TImage是 400x400,所以它们实际上只是代表TImage的中心。代码在ButtonClick程序下——我只想在图像上绘制类似雷达的表面。然后我在上面画轨迹。我只有stroke和color属性值,它们是3对应stroke和TAlphaColors.Black对应color。TImage的对象检查器中的不透明度值为1(如果这是您要询问的)。 -
我只是无法理解为什么相同的 FireMonkey 代码在 Win32 下工作但在 Android 下不工作。我对 Delphi 还很陌生,我相信相同的代码在它们下都可以正常工作。以我有限的知识,Embarcadero wiki 对我并没有那么大的帮助。当我想在 TPaintBox 上绘制多条轨迹时,在我的情况下使用 TPaintBox 会比 TImage 更好吗(所以在循环中编辑它大约 1000 步)?
-
感谢您回复我的评论,但请将该信息添加到您的问题中,在 cmets 中很容易被忽略。我关于不透明度的问题源于您的行:
Image1.Bitmap.Canvas.DrawLine(p1, p2, 100);。第三个参数是不透明度,0..1.0 acc docs,但是好的,任何高于 1.0 的都被认为是 1.0。
标签: delphi firemonkey rad-studio