Direct2D坐标错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Direct2D坐标错误相关的知识,希望对你有一定的参考价值。

我在用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)的线,你可以使用别名渲染或使用半像素偏移。

以上是关于Direct2D坐标错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Direct2D 和 DirectWrite(C++、DirectX)制作按钮

Direct2d CreateBitmapfromWICBitmap 在 ATL 中给出断言错误

C# 使用 Direct2D 实现斜角效果

Direct2D开发:向 MFC 项目添加 Direct2D 对象

Direct2D 第6篇 绘制多种风格的线条

Direct2D教程Direct2D已经来了,谁是GDI的终结者?