zoukankan      html  css  js  c++  java
  • 再学 GDI+[73]: 区域(2) 区域运算

    Intersect  {交集}
    Union      {联合}
    Xor_       {减去交集}
    Exclude    {减去}
    Complement {不相交}
    
    //GDI+ 的区域能和矩形、路径、另一个区域三种对象进行运算.
    
    本例效果图:



    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        RadioGroup1: TRadioGroup;
        procedure FormCreate(Sender: TObject);
        procedure FormPaint(Sender: TObject);
        procedure RadioGroup1Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses GDIPOBJ, GDIPAPI;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      RadioGroup1.Items.CommaText := '通道,矩形,Intersect,Union,Xor_,Exclude,Complement';
      RadioGroup1.ItemIndex := 0;
    end;
    
    procedure TForm1.FormPaint(Sender: TObject);
    var
      g: TGPGraphics;
      p: TGPPen;
      path: TGPGraphicsPath;
      b: TGPBrush;
      rgn: TGPRegion;
      rt: TGPRect;
    begin
      g := TGPGraphics.Create(Canvas.Handle);
      p := TGPPen.Create(MakeColor(100, 255, 0, 0));
      b := TGPHatchBrush.Create(HatchStyleSmallGrid, aclSilver, aclCornflowerBlue);
    
      {准备个路径}
      path := TGPGraphicsPath.Create;
      path.AddEllipse(20, 20, 100, 80);
    
      {根据路径建立区域}
      rgn := TGPRegion.Create(path);
    
      {获取距形}
    //  rgn.GetBounds(rt, g);
      path.GetBounds(rt);
    
      {下移矩形, 将用此矩形与上面的区域进行运算}
      rt.Y := rt.Y + rt.Height div 2;
    
      case RadioGroup1.ItemIndex of
        1: rgn := TGPRegion.Create(rt);
        2: rgn.Intersect(rt);
        3: rgn.Union(rt);
        4: rgn.Xor_(rt);
        5: rgn.Exclude(rt);
        6: rgn.Complement(rt);
      end;
    
      g.FillRegion(b, rgn);
      g.DrawPath(p, path);
      g.DrawRectangle(p, rt);
    
      b.Free;
      rgn.Free;
      p.Free;
      g.Free;
    end;
    
    procedure TForm1.RadioGroup1Click(Sender: TObject);
    begin
      Repaint;
    end;
    
    end.
    
    窗体文件:
    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 167
      ClientWidth = 238
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      Position = poDesktopCenter
      OnCreate = FormCreate
      OnPaint = FormPaint
      PixelsPerInch = 96
      TextHeight = 13
      object RadioGroup1: TRadioGroup
        Left = 137
        Top = 8
        Width = 91
        Height = 151
        Caption = 'RadioGroup1'
        TabOrder = 0
        OnClick = RadioGroup1Click
      end
    end
    
  • 相关阅读:
    解决Maven关于本地jar包的打包处理
    微信公众帐号应用开发—本地调试
    字符串
    动态类型
    数字
    React文档(二十四)高阶组件
    React文档(二十三)Web Components
    React文档(二十二)context
    React文档(二十一)协调
    React文档(二十)不使用JSX
  • 原文地址:https://www.cnblogs.com/del/p/1232416.html
Copyright © 2011-2022 走看看