作者:mobiledu2502906817 | 来源:互联网 | 2023-10-10 14:50
Direct2D(19):图层之TD2D1LayerParameters.geometricMask(使用几何图形剪裁图层)usesDirect2D,D2D1;procedureT
Direct2D (19) : 图层之 TD2D1LayerParameters.geometricMask (使用几何图形剪裁图层)
uses Direct2D, D2D1;
procedure TForm1.FormPaint(Sender: TObject);
var
cvs: TDirect2DCanvas;
iLayer: ID2D1Layer;
rLayerParameters: TD2D1LayerParameters;
wic: TWICImage;
R: TRect;
iEllipse: ID2D1EllipseGeometry;
begin
wic := TWICImage.Create;
wic.LoadFromFile('C:\Temp\Test.png');
R := Rect(0, 0, wic.Width, wic.Height);
{几何图形}
D2DFactory.CreateEllipseGeometry(D2D1Ellipse(D2D1PointF(wic.Width/2, wic.Height/2), wic.Width/2, wic.Height/2), iEllipse);
cvs := TDirect2DCanvas.Create(Canvas, ClientRect);
cvs.RenderTarget.SetTransform(TD2DMatrix3x2F.Translation((ClientWidth-wic.width)/2, (ClientHeight-wic.height)/2));
cvs.BeginDraw;
cvs.RenderTarget.CreateLayer(nil, iLayer);
rLayerParameters.contentBounds := R;
rLayerParameters.geometricMask := iEllipse; //!
rLayerParameters.maskAntialiasMode := D2D1_ANTIALIAS_MODE_PER_PRIMITIVE;
rLayerParameters.maskTransform := TD2DMatrix3x2F.Identity;
rLayerParameters.opacity := 1.0;
// rLayerParameters.opacityBrush := nil;
rLayerParameters.layerOptions := D2D1_LAYER_OPTIONS_NONE;
cvs.RenderTarget.PushLayer(rLayerParameters, iLayer);
cvs.StretchDraw(R, wic);
cvs.RenderTarget.PopLayer;
cvs.EndDraw;
cvs.Free;
wic.Free;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
Repaint;
end;
效果图:
posted on
2011-04-05 17:08
万一
阅读(1386)
评论(0)
编辑
收藏