您的位置:首页 > 其它

Direct2D (19) : 图层之 TD2D1LayerParameters.geometricMask (使用几何图形剪裁图层)

2011-04-05 17:08 253 查看
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;


效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: