不缩放线条厚度的情况下使用Direct2D绘制线条

3
我刚刚转向使用Direct2D技术在我的项目中。我使用的是C++Builder XE2,采用了带有VCL Windows平台的XE2 Direct2D包装器。我能够绘制矩形、线条、椭圆等图形,并具备缩放、旋转和平移功能。所有功能都非常好用。现在唯一的问题是线条粗细会随比例因素进行调整。我想保持线条粗细不变,而不管比例因素如何。我从长时间的谷歌搜索中找到的唯一解决方案是设置D2D1_STROKE_TRANSFORM_TYPE为D2D1_STROKE_TRANSFORM_TYPE_FIXED。

我应该在哪里进行设置?还有其他方法吗?

谢谢, Bill

1个回答

1

我也在寻找同样的东西,这里提供给大家以便有用。在“Draw…”方法结束时,有一个叫做“ID2D1StrokeStyle1*”的参数,这就是我们需要传递的内容。为了创建一个描边样式,我们需要声明一个

ID2D1StrokeStyle1* strokeStyleFixedThickness;

我们使用ID2D1Factory1的CreateStrokeStyle函数对其进行初始化。下面创建了一个带有所有默认设置的描边样式,只是将描边转换类型设置为固定:

HRESULT hr = direct2dFactory->CreateStrokeStyle(
    D2D1::StrokeStyleProperties1(
        D2D1_CAP_STYLE_FLAT,
        D2D1_CAP_STYLE_FLAT,
        D2D1_CAP_STYLE_FLAT,
        D2D1_LINE_JOIN_MITER,
        10.0f,
        D2D1_DASH_STYLE_SOLID,
        0.0f, D2D1_STROKE_TRANSFORM_TYPE_FIXED),
        nullptr, 0, &strokeStyleFixedThickness);

然后您可以在渲染目标的绘制方法中使用它:

renderTarget->DrawLine(point0, point1, myBrush, lineWidth, strokeStyleFixedThickness);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接