2016-08-18 38 views
2

我正在处理API,它需要我在ID2D1Rendertarget上设置外部几何蒙版,以便任何绘制调用之后只绘制位于外部的图形部分这个几何。如何在d2d中设置外部几何蒙版,因此d2d只在外部绘制该几何图形

https://msdn.microsoft.com/en-us/library/windows/desktop/dd756675(v=vs.85).aspx解释了我们如何在ID2D1Rendertarget上设置一个内部几何蒙版,这样任何绘制调用之后,只会绘制位于该几何内部的绘图部分。我想实现与此相反的部分。这可能吗?任何帮助深表谢意。

回答

1

一种方法是从填充整个渲染目标的矩形中减去几何图形。查看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(); 

使用反转几何作为几何蒙版,而不是原始路径几何。

第二种方法是将您的几何图形栅格化为位图并将其用作不透明蒙版。您可以根据是否需要内部或外部遮罩来翻转颜色。

+0

对我来说很合理 –