将Delphi TPoint转换为C#Point

时间:2013-06-20 14:25:14

标签: delphi c#-4.0 graphics vcl delphi-6

我正在尝试转换一些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

1 个答案:

答案 0 :(得分:4)

我不确定在这里被问到的确切问题是什么。您的代码段中没有Delphi TPoint;你只需要客户端矩形逻辑坐标。

原点位于X = 0, Y = 0,即客户区左上角。增加X会将位置向右移动,增加Y会使位置向下移动。逻辑单位是像素,因此从0, 0的原点开始,Canvas.MoveTo(10, 10)会将新绘图位置从左边缘设置为10像素,从前10个像素开始设置为Canvas.LineTo(20, 20) }从那里将从10, 1020, 20的点画一条线。

TCanvas.MoveToTCanvas.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));
}

这会产生以下输出:

Side by side output comparison