【问题标题】:Limit drawing area on DirectX在 DirectX 上限制绘图区域
【发布时间】:2012-10-29 03:56:09
【问题描述】:

我正在使用 Direct2D 绘制自定义图表。该图表在图表一侧绘制了 x 轴和 y 轴标签。当我垂直缩放图表时,一些数据将绘制在 x 轴标签的顶部,我希望始终保持轴标签的清洁。将绘画区域限制为自定义矩形而不是整个控件的最佳方法是什么?

我有几个想法,但我不确定是否有更好的方法来做到这一点:

方法一)

使用 GDI 样式并在一个面板上绘制图表区域,在另一个面板上绘制轴标签。这样,当我绘制到图表面板时,我就不会弄乱轴标签。问题是我必须制作更多 Direct2D 对象(至少为每个控件 (hWnd) 渲染目标),我不确定这样做会影响性能。

方法二)

每次更新轴标签时将其复制到位图,然后在图表面板命令之后将这些位图绘制到控件顶部。这比方法一便宜吗?

方法三)

在每次绘图操作中手动检查像素位置,并在必要时进行修改。这似乎是最糟糕的选择。

编辑:

方法4)

与方法 1) 相同,但使用 GDI+ 绘制轴标签,并且仅对图表使用 Direct2D。

方法五)

使用 ID2DLayer。我刚刚从MSDN Documentation 发现了这个功能。这似乎是我正在寻找的东西,但它带有许多关于频繁使用会影响性能的警告。

你的意见?

【问题讨论】:

    标签: graphics directx direct2d


    【解决方案1】:

    您可以使用轴对齐的夹子,这样不那么饿。

    to push

    to pop

    来自 msdn 的示例:

    pRT->PushAxisAlignedClip(
    D2D1::RectF(20, 20, 100, 100),
    D2D1_ANTIALIAS_MODE_PER_PRIMITIVE
    );
    
    pRT->FillRectangle(D2D1::RectF(0, 0, 200, 133), m_pOriginalBitmapBrush);
    pRT->PopAxisAlignedClip();
    

    【讨论】:

    • 非常感谢。我已经实现了基于层的解决方案,它工作正常。我想你的解决方案会让它变得更快,所以我会改用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 2017-05-31
    • 2020-12-22
    • 2017-11-18
    • 2012-03-16
    • 2011-02-23
    相关资源
    最近更新 更多