我正在使用Direct2D绘制一个自定义图表。图表的一侧绘制有x轴和y轴标签。当我垂直缩放图表时,一些数据将绘制在x轴标签的顶部,并且我希望始终保持轴标签的清洁。将绘制区域限制为自定义矩形而不是整个控件的最佳方式是什么?
我有一些想法,但我不确定是否有更好的方法来做到这一点:
方法1)
Go GDI样式,在一个面板上绘制图表区域,在另一个面板上绘制轴标签。这样,当我绘制到图表面板时,我就不会弄乱轴标签。问题是我将不得不创建更多的Direct2D对象(至少为每个控件(HWnd)呈现目标),并且我不确定如果这样做会对性能产生什么影响。
方法2)
每次更新轴标签时,将它们复制到位图中,然后在图表面板命令之后,在控件顶部绘制这些位图。这比方法1便宜吗?
方法3)
手动检查每个绘图操作上的像素位置,然后在必要时进行修改。这似乎是最糟糕的选择。
编辑:
方法4)
与方法1相同),但使用GDI+绘制轴标签,并仅对图表使用Direct2D。
方法5)
使用ID2DLayer。我刚在MSDN Documentation上发现了这个特性。这似乎就是我想要的,但它也伴随着很多关于频繁使用会影响性能的警告。
你的观点是?
发布于 2012-11-09 21:27:41
你可以使用轴对齐的剪辑,这样不会太饿。
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();https://stackoverflow.com/questions/13297757
复制相似问题