• 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;
    


    效果图:



  • 相关阅读:
    android TextView字体设置最少占多少行. 及其 Java String 字符串操作 . .
    Android ViewSwitcher 的功能与用法
    (14):Chain of Responsibility 职责链模式(行为型模式)
    享元模式Flyweight
    外观模式Facade
    装饰模式(Decorator)
    软件实现
    面向对象设计
    面向对象分析
    面向对象基础
  • 原文地址:https://www.cnblogs.com/del/p/2005949.html
Copyright © 2020-2023  润新知