如何在 d2d 中设置外部几何掩码,以便 d2d 仅在该几何外部绘制
How to set a outer geometry mask in d2d so d2d only draws outside that geometry
我正在研究 API,这需要我在 ID2D1Rendertarget 上设置一个外部几何遮罩,这样之后的任何绘图调用都只会绘制位于该几何之外的绘图部分。
https://msdn.microsoft.com/en-us/library/windows/desktop/dd756675(v=vs.85).aspx 解释了我们如何在 ID2D1Rendertarget 上设置一个内部几何遮罩,这样之后的任何绘制调用都只绘制位于此 geometry.I 内的部分绘图,想要实现的恰好相反。这可能吗?非常感谢任何帮助。
一种方法是从填充整个渲染目标的矩形中减去几何体。查看 combining geometries 上的 MSDN 页面。我在下面有一个小代码示例:
ComPtr<ID2D1PathGeometry> invertedGeometry;
ComPtr<ID2D1RectangleGeometry> rectangleGeometry;
d2dFactory->CreateRectangleGeometry(
{ 0, 0, targetWidth, targetHeight },
&rectangleGeometry
);
ComPtr<ID2D1GeometrySink> geometrySink;
d2dFactory->CreatePathGeometry(&invertedGeometry);
invertedGeometry->Open(&geometrySink);
rectangleGeometry->CombineWithGeometry(
pathGeometry.Get(),
D2D1_COMBINE_MODE_EXCLUDE,
D2D1::Matrix3x2F::Identity(),
geometrySink.Get()
);
geometrySink->Close();
使用倒置几何作为几何遮罩,而不是原始路径几何。
第二种方法是将几何图形栅格化为位图并将其用作不透明蒙版。您可以根据要遮盖内部还是外部来翻转颜色。
我正在研究 API,这需要我在 ID2D1Rendertarget 上设置一个外部几何遮罩,这样之后的任何绘图调用都只会绘制位于该几何之外的绘图部分。
https://msdn.microsoft.com/en-us/library/windows/desktop/dd756675(v=vs.85).aspx 解释了我们如何在 ID2D1Rendertarget 上设置一个内部几何遮罩,这样之后的任何绘制调用都只绘制位于此 geometry.I 内的部分绘图,想要实现的恰好相反。这可能吗?非常感谢任何帮助。
一种方法是从填充整个渲染目标的矩形中减去几何体。查看 combining geometries 上的 MSDN 页面。我在下面有一个小代码示例:
ComPtr<ID2D1PathGeometry> invertedGeometry;
ComPtr<ID2D1RectangleGeometry> rectangleGeometry;
d2dFactory->CreateRectangleGeometry(
{ 0, 0, targetWidth, targetHeight },
&rectangleGeometry
);
ComPtr<ID2D1GeometrySink> geometrySink;
d2dFactory->CreatePathGeometry(&invertedGeometry);
invertedGeometry->Open(&geometrySink);
rectangleGeometry->CombineWithGeometry(
pathGeometry.Get(),
D2D1_COMBINE_MODE_EXCLUDE,
D2D1::Matrix3x2F::Identity(),
geometrySink.Get()
);
geometrySink->Close();
使用倒置几何作为几何遮罩,而不是原始路径几何。
第二种方法是将几何图形栅格化为位图并将其用作不透明蒙版。您可以根据要遮盖内部还是外部来翻转颜色。