【发布时间】:2013-08-20 13:02:36
【问题描述】:
只需创建简单的 FireMokey HD 应用,将带有 align=alclient 的 TImage 放在表单上并尝试绘制简单的黑色矩形:
procedure TForm8.FormCreate(Sender: TObject);
var
c: TCanvas;
begin
Image.Bitmap := TBitmap.Create(ClientWidth, ClientHeight);
c := Image.Bitmap.Canvas;
c.BeginScene;
try
c.Clear(claWhite);
c.Stroke.Color := claBlack;
c.Stroke.Kind := TBrushKind.bkSolid;
c.DrawRect(
TRectF.Create(7,7,ClientWidth-7,ClientHeight-7),
0,0,
[],
1
);
finally
c.EndScene;
end;
end;
而且它不起作用。矩形的颜色不是黑色,它是一种灰色。角落的颜色有一些变化。我需要设置一些其他属性还是这里有什么问题? 我尝试了不同的不透明度值(1,100,255,65535),图片根本没有改变,帮助中没有任何信息,这个选项到底意味着什么。 放大的左上角:
还尝试使用示例中描述的多边形。同样的问题-圆角和灰色而不是黑色(图像的不透明度属性为1,默认情况下所有属性):
procedure TForm8.Button2Click(Sender: TObject);
var
p1, p2, p3, p4, p5: TPointF;
MyPolygon: TPolygon;
begin
// sets the points that define the polygon
p1.Create(100, 100);
p2.Create(200, 100);
p3.Create(200, 200);
p4.Create(100, 200);
p5.Create(100, 100);
// creates the polygon
SetLength(MyPolygon, 5);
MyPolygon[0] := p1;
MyPolygon[1] := p2;
MyPolygon[2] := p3;
MyPolygon[3] := p4;
MyPolygon[4] := p5;
Image.Bitmap.Canvas.BeginScene;
// draws the polygon on the canvas
Image.Bitmap.Canvas.DrawPolygon(MyPolygon, 50);
Image.Bitmap.Canvas.EndScene;
// updates the bitmap
// Image.Bitmap.BitmapChanged;
end;
【问题讨论】:
-
能否添加一个带有Delphi版本的标签,请问您是在哪里遇到这个问题的?顺便提一句。您是否尝试过关注,例如
this example?我不知道 FMX,但这不是BeginScene和EndScene重要吗? 【自毁评论;请不要回复] -
@TLama:您链接中的那些示例已经过时。方法 BitmapChanged 不再可用,它现在处于受保护的部分(这是个好消息,因为同时使用 EndScene 和其他东西很奇怪)。 BeginScene 和 EndScene 在这种情况下没有帮助。这是基本功能,很难在 FM 中找到应有的功能......
-
我不知道你为什么说
BeginScene和EndScene没有帮助,但至少你应该调用这个函数对(并且你在你的代码中错过了它现在)。请参阅BeginScene参考。在 TCanvas 上绘图之前,有明确的说明,Call BeginScene。要结束绘图会话,请调用 EndScene。 -
@TLama:我说它没有帮助,因为我试过了。我尝试使用不同的参数并没有看到任何结果。刚刚更新的代码示例,现在它有 Begin-End 场景,问题仍然存在。
-
尝试将 0.5 添加到所有坐标。我相信 FMX 在像素边界上绘制,因此绘制两条像素宽的灰线,而不是单像素宽的黑线。
标签: delphi canvas opacity firemonkey delphi-xe3