zoukankan      html  css  js  c++  java
  • 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;
    


    效果图:



  • 相关阅读:
    32位和64位的区别
    Git--版本管理的使用及理解
    Maven使用详解
    记录centos7下tomcat部署war包过程
    SSM三大框架整合教程
    Mybatis 框架搭建实例
    Eclipse 出现select type (? = any character,*= any String,Tz=TimeZone)
    JDBC 操作数据库实例
    mysql 常用命令语法
    MySQL下载安装详情教程(Windows)
  • 原文地址:https://www.cnblogs.com/del/p/2005949.html
Copyright © 2011-2022 走看看