gpt4 book ai didi

direct2d - Direct2D 中的像素

转载 作者:行者123 更新时间:2023-12-02 21:02:06 26 4
gpt4 key购买 nike

enter image description here

深灰色线应该是黑色且 1 像素宽:

pRT->DrawLine(Point2F(100, 120), Point2F(300, 120), blackbrush, 1);

浅灰色线应该是黑色且 0.5 像素宽:

pRT->DrawLine(Point2F(120, 130), Point2F(280, 130), blackbrush, 0.5);

相反,它们都是 2 像素宽。如果我要求 2 像素宽,则线条是黑色的,但自然是 2 像素宽。

渲染目标的大小与窗口客户区的大小相同。我想要像 GDI 中那样的像素精度,一个坐标 = 一个像素和纯颜色...

谢谢。

最佳答案

Direct2D 渲染正确。当您给它一个像素坐标(例如 (100, 120))时,它指的是从像素坐标 (100, 120) 到 (101, 121)(包括上/左)的像素元素的左上角,右/下为专有)。由于它是一条水平直线,因此您可以有效地从 (99.5, 119.5) - (300.5, 120.5) 获得一个填充矩形。由于该边缘溢出到相邻像素,这就是为什么您会在“错误”亮度下得到“2像素宽度”的线条。您必须考虑像素坐标(没有面积的点)和像素元素(屏幕上面积为 1x1 的物理点,当然也只是 1)。

如果您想从覆盖像素 (100, 120) 到 (300, 120) 的位置绘制一条直线,您应该使用 SemMike 使用锯齿渲染的建议(这对于直线来说非常有用!),或者您可以使用半像素偏移(因为描边宽度=1;对于其他描边宽度,按描边宽度/2调整)。从 (100.5, 120.5) - (299.5, 120.5) 绘制,描边宽度为 1.0 将得到您想要的内容。该描边围绕您指定的像素坐标延伸,因此您将在像素元素 (100, 120) - (300, 121) 上获得“填充矩形”。再说一遍,这是一个独占范围,因此“y=121”实际上并未填充,x=300 也未填充。

如果您想知道为什么 GDI 之类的东西不会发生这种情况,那是因为它不进行抗锯齿渲染,所以所有东西总是捕捉到像素元素。如果您想知道为什么 WPF 在使用 Shapes 时不会发生这种情况,这是因为它使用布局舍入 (UseLayoutRounding) 和像素捕捉。 Direct2D 不提供这些服务,因为它是一个相对较低级别的 API。

关于direct2d - Direct2D 中的像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10763762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com