Как я могу обрезать изображение в круг в DirectX - PullRequest
0 голосов
/ 20 сентября 2019

Я хотел бы знать, как обрезать изображение в directx с помощью круга.Не имеет значения, какой будет обрезка (с геометрией или другим изображением).

    Microsoft::WRL::ComPtr<ID2D1Effect> hueRotationEffect;
Microsoft::WRL::ComPtr<ID2D1Effect> shadowEffect;
Microsoft::WRL::ComPtr<ID2D1Effect> affineTransformEffect;
Microsoft::WRL::ComPtr<ID2D1Effect> compositeEffect;
Microsoft::WRL::ComPtr<ID2D1EllipseGeometry> unitEllipseGeometry;
ID2D1Factory* factory;

context2->CreateEffect(CLSID_D2D1Shadow, &shadowEffect);
context2->CreateEffect(CLSID_D2D12DAffineTransform, &affineTransformEffect);
context2->CreateEffect(CLSID_D2D1Composite, &compositeEffect);
context2->CreateEffect(CLSID_D2D1HueRotation, &hueRotationEffect);

//Effect of hue
hueRotationEffect->SetInput(1, tetronimoBitmap.Get());
hueRotationEffect->SetValue(D2D1_HUEROTATION_PROP_ANGLE, 270.0f);

//Effect of shader
shadowEffect->SetInput(0, tetronimoBitmap.Get());
affineTransformEffect->SetInputEffect(0, shadowEffect.Get());

D2D1_MATRIX_3X2_F matrix = D2D1::Matrix3x2F::Translation(20, 20);

affineTransformEffect->SetValue(D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX, matrix);

compositeEffect->SetInput(1, tetronimoBitmap.Get());
compositeEffect->SetInputEffect(0, affineTransformEffect.Get());
hueRotationEffect->SetInputEffect(0, compositeEffect.Get());

//rectImage = { width,height, tetronimoBitmap->GetSize().width, tetronimoBitmap->GetSize().height };

context2->DrawImage(hueRotationEffect.Get(), D2D1::Point2F(100, 100));
...