我在用direct2d做一个测试程序来显示线条,然而我注意到一个小细节,那就是当我让direct2d画一条虚线(100,200)和(500,200)时,direct2d真的不是在(100,200)这个点上画线的起点,而是少画了一个像素,也就是在坐标(100,99)处进行坐标。有人知道这是为什么吗?我用direct2d不使用抗锯齿模式检查了这个细节,并在调试输出中显示了鼠标坐标。
这是Direct2D自身设计造成的。
准确的说,这条线的坐标是从(99.5,199.5)-(500.5,200.5)。
而 @Rick Brewster的回答 已经解释了这些。
当你给它一个像素坐标,如(100,120),那是指从像素坐标(100,120)到(101,121)的像素元素的上角和左角(topleft是包含的,rightbottom是排他的)。由于这是一条水平直线,你实际上得到的是一个从(99.5,119.5)-(300.5,120.5)的填充矩形。
因此,如果你想画一条从覆盖像素(100,200)到(500,200)的线,你可以使用别名渲染或使用半像素偏移。