我正在尝试转换一些Delphi代码,因为我们正在重新编写.Net中的Delphi 6.0(VCL)应用程序。我不确定并且无法弄清楚2个Delphi Tpoints(x,y)与C#Point(x,y)之间的比较。
我想在两点之间划一条线,但由于我不知道Delphi如何绘制它,我无法为它设置C#坐标。
Delphi代码很简单:
Canvas.MoveTo(x, y - 128);
Canvas.LineTo(x, y);
我知道C#坐标虽然大约每英寸72点,但需要计算像素密度。但我不确定德尔福PPI。
任何人都将不胜感激。感谢。
编辑:如果有人在想我的代码片段中没有 TPoint 我在说什么,Canvas.MoveTo设置画布的PenPos属性 TPoint
答案 0 :(得分:4)
我不确定在这里被问到的确切问题是什么。您的代码段中没有Delphi TPoint
;你只需要客户端矩形逻辑坐标。
原点位于X = 0, Y = 0
,即客户区左上角。增加X
会将位置向右移动,增加Y
会使位置向下移动。逻辑单位是像素,因此从0, 0
的原点开始,Canvas.MoveTo(10, 10)
会将新绘图位置从左边缘设置为10像素,从前10个像素开始设置为Canvas.LineTo(20, 20)
}从那里将从10, 10
到20, 20
的点画一条线。
TCanvas.MoveTo
和TCanvas.LineTo
只是基础Windows GDI函数MoveToEx
(总是NULL
第三个参数)和LineTo
的包装器。
就C#等价物而言,如果您指的是System.Drawing.Point
,则使用的单位完全相同(尽管我不确定默认情况下原点的位置)。鉴于0, 0
的来源,System.Drawing.Point(10, 10)
应与上述相同的位置 - 距离左边缘10个像素,距离上边缘10个像素。
快速检查确认WinForms应用程序中的原点实际上是客户区的左上角,使用:
// Delphi code
procedure TForm3.FormPaint(Sender: TObject);
begin
Canvas.Pen.Color := clRed;
Canvas.MoveTo(0, 0);
Canvas.LineTo(100, 100);
end;
// C# code
private void Form1_Paint(object sender, PaintEventArgs e)
{
Pen newPen = new System.Drawing.Pen(Color.Red);
e.Graphics.DrawLine(newPen, new Point(0, 0), new Point(100, 100));
}
这会产生以下输出: