【发布时间】:2013-03-29 21:46:03
【问题描述】:
DrawLine 可以处理定义区域之外的坐标吗?
例如myGraphics.DrawLine(MyPen, -20, -80, 20, 90);
我希望这能正确生成一条线,就好像它使用了无限画布但只绘制了我的图形中的部分。
我的代码如下。我正在根据数据库中记录的坐标绘制运动。有时,主体移动得比预期的更远,超出了我的位图边缘。我没有检查这种情况,因为我依靠 DrawLine 来处理它。
Bitmap Border = new Bitmap(5000, 5000);
Border.SetResolution(254, 254);
Graphics MyGraphics= Graphics.FromImage(Border);
Pen MyPen = new Pen(Color.Black, 1);
for (Int32 Point = 1; Point <= Points; Point++)
{
XCoord2 = XCoord1;
YCoord2 = YCoord1;
XCoord1 = *READ FROM DATABASE*
YCoord1 = *READ FROM DATABASE*
if (Point > 1)
{
MyGraphics.DrawLine(MyPen, XCoord1, YCoord1, XCoord2, YCoord2);
}
}
实际上,我的情节大部分时间都有效。但是,我偶尔会得到一个缺少线条或来自奇怪坐标的模糊线条的图形。
总之,DrawLine 的行为是否可以通过不寻常的参数进行预测。我应该引入一些三角函数来强制绘图始终在我的网格内吗?
【问题讨论】:
-
除非您使用非常大的坐标(这可能导致溢出或舍入问题),否则我认为您应该没问题。 GDI 有各种视口和窗口支持,这意味着处理这些东西对于实现者来说应该是轻而易举的事。剪裁我从来没有遇到过任何问题。
-
@AshBurlaczenko 正如问题所说“我的情节大部分时间都有效”。我花了几个小时试图找出我偶尔失败的原因。当我扫描我的 1000-2000 坐标时,似乎没有什么不寻常的,这就是我现在怀疑 DrawLine 的原因。我来到这里是希望有人能证实这一点。
-
所有 GDI+ 绘图都是在内部使用 float 完成的。舍入错误很常见。