我正在尝试转换某些Delphi代码,因为我们正在.Net中重新编写Delphi 6.0(VCL)应用程序。我不确定,也无法弄清楚2 Delphi Tpoints(x,y)与C#Point(x,y)的比较。

我试图在2点之间画一条线,但是由于我不知道Delphi是如何画的,所以我无法为其设置C#坐标。

Delphi代码很简单:

Canvas.MoveTo(x, y - 128);
Canvas.LineTo(x, y);


我知道C#坐标,尽管大约是每英寸72点,并且需要计算像素密度。但是我不确定Delphi PPI。

任何将不胜感激。谢谢。

编辑:如果有人想知道我在说什么TPoint,而我的代码段中没有,Canvas.MoveTo设置TPoint类型的画布的PenPos属性。

最佳答案

我不确定在这里问的确切问题是什么。您的代码段中没有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));
}


这将产生以下输出:

关于delphi - 将Delphi TPoint转换为C#点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17216243/

10-14 19:38
查看更多