我正在尝试转换一些 Delphi 代码,因为我们正在 .Net 中重写 Delphi 6.0 (VCL) 应用程序。我不确定也无法弄清楚 2 个 Delphi Tpoint(x,y) 与 C# Point(x,y) 之间的比较。
我试图在两点之间画一条线,但由于我不知道 Delphi 如何绘制它,所以我无法为其设置 C# 坐标。
Delphi 代码很简单:
Canvas.MoveTo(x, y - 128);
Canvas.LineTo(x, y);
我知道 C# 坐标大约是每英寸 72 个点,并且需要计算像素密度。但我不确定德尔福 PPI。
任何人都将不胜感激。谢谢。
编辑:如果有人想知道我在说什么 TPoint,而我的代码片段中没有,Canvas.MoveTo 设置 Canvas 的 PenPos 属性,其类型为 TPoint强>.
最佳答案
我不确定这里问的确切问题是什么。您的代码片段中没有 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# Point,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17216243/