再学 GDI+[33]: TGPPen - 画笔的几何变换 - SetTransform

几何变换也就是 Matrix 变换, 画笔的 Matrix 会忽略 dx、dy 平移参数; 选择 LineCapRound 线帽效果比较好.

本例效果图:

再学 GDI+[33]: TGPPen - 画笔的几何变换 - SetTransform

代码文件:

unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ComCtrls, StdCtrls, ExtCtrls;



type

  TForm1 = class(TForm)

    Panel1: TPanel;

    Button1: TButton;

    TrackBar1: TTrackBar;

    TrackBar2: TTrackBar;

    TrackBar3: TTrackBar;

    TrackBar4: TTrackBar;

    procedure FormCreate(Sender: TObject);

    procedure FormPaint(Sender: TObject);

    procedure TrackBar1Change(Sender: TObject);

    procedure TrackBar2Change(Sender: TObject);

    procedure TrackBar3Change(Sender: TObject);

    procedure TrackBar4Change(Sender: TObject);

  end;



var

  Form1: TForm1;



implementation



{$R *.dfm}



uses GDIPOBJ, GDIPAPI;



procedure TForm1.FormCreate(Sender: TObject);

const

  n = 40;

begin

  TrackBar1.Min := -n;

  TrackBar1.Max := n;

  TrackBar2.Min := -n;

  TrackBar2.Max := n;

  TrackBar3.Min := -n;

  TrackBar3.Max := n;

  TrackBar4.Min := -n;

  TrackBar4.Max := n;



  TrackBar1.Position := 10;

  TrackBar2.Position := 0;

  TrackBar3.Position := 0;

  TrackBar4.Position := 10;



  Button1.OnClick := FormCreate;

end;



procedure TForm1.FormPaint(Sender: TObject);

var

  g: TGPGraphics;

  b: TGPBrush;

  p: TGPPen;

  matrix: TGPMatrix;

  m11, m12, m21, m22: Single;

begin

  g := TGPGraphics.Create(Canvas.Handle);

  b := TGPHatchBrush.Create(HatchStyleLargeGrid, aclForestGreen);

  p := TGPPen.Create(b, 16);



  m11 := TrackBar1.Position / 10;

  m12 := TrackBar2.Position / 10;

  m21 := TrackBar3.Position / 10;

  m22 := TrackBar4.Position / 10;



  matrix := TGPMatrix.Create(m11, m12, m21, m22, 0, 0);

  p.SetTransform(matrix);

  p.SetStartCap(LineCapRound);

  p.SetEndCap(LineCapRound);



  g.DrawLine(p, 30, 30, ClientWidth - Panel1.Width - 30, ClientHeight - 30);



  matrix.Free;

  b.Free;

  p.Free;

  g.Free;

end;



procedure TForm1.TrackBar1Change(Sender: TObject);

begin

  Repaint;

end;



procedure TForm1.TrackBar2Change(Sender: TObject);

begin

  Repaint;

end;



procedure TForm1.TrackBar3Change(Sender: TObject);

begin

  Repaint;

end;



procedure TForm1.TrackBar4Change(Sender: TObject);

begin

  Repaint;

end;



end.


 
   
窗体文件:

object Form1: TForm1

  Left = 0

  Top = 0

  Caption = 'Form1'

  ClientHeight = 184

  ClientWidth = 327

  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 Panel1: TPanel

    Left = 228

    Top = 0

    Width = 99

    Height = 184

    Align = alRight

    TabOrder = 0

    ExplicitLeft = 225

    ExplicitHeight = 170

    object Button1: TButton

      Left = 14

      Top = 8

      Width = 75

      Height = 25

      Caption = #21021#22987#21270

      TabOrder = 0

    end

    object TrackBar1: TTrackBar

      Left = 0

      Top = 39

      Width = 100

      Height = 20

      ShowSelRange = False

      TabOrder = 1

      OnChange = TrackBar1Change

    end

    object TrackBar2: TTrackBar

      Left = 0

      Top = 72

      Width = 100

      Height = 20

      ShowSelRange = False

      TabOrder = 2

      OnChange = TrackBar2Change

    end

    object TrackBar3: TTrackBar

      Left = 0

      Top = 106

      Width = 100

      Height = 20

      ShowSelRange = False

      TabOrder = 3

      OnChange = TrackBar3Change

    end

    object TrackBar4: TTrackBar

      Left = 0

      Top = 140

      Width = 100

      Height = 20

      ShowSelRange = False

      TabOrder = 4

      OnChange = TrackBar4Change

    end

  end

end


 
   

你可能感兴趣的:(transform)