2016-08-18 2 views
2

Я работаю над API, который требует от меня настроить внешнюю геометрию маски на ID2D1Rendertarget, так что любой вызов рисования после этого только рисует часть чертежей, которая находится снаружи эта геометрия.Как установить внешнюю геометрию маски в d2d, так что d2d вытягивает только эту геометрию

https://msdn.microsoft.com/en-us/library/windows/desktop/dd756675(v=vs.85).aspx объясняет, как мы можем настроить внутреннюю геометрию маски на ID2D1Rendertarget так, чтобы любой призыв рисования после этого только рисовал часть чертежей, которые находятся внутри этой геометрии. Я хочу реализовать только что противоположное этому. Это возможно? Любая помощь глубоко ценится.

ответ

1

Один из способов сделать это - вычесть вашу геометрию из прямоугольника, который заполняет всю цель рендеринга. Проверьте страницу MSDN на странице combining geometries. У меня есть небольшой пример кода ниже:

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

имеет смысл для меня, спасибо –

Смежные вопросы