我正在尝试转换某些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, 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));
}
这将产生以下输出:
关于delphi - 将Delphi TPoint转换为C#点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17216243/