2016-08-18 37 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

對我來說很合理 –