zoukankan      html  css  js  c++  java
  • 再学 GDI+[33]: TGPPen 画笔的几何变换 SetTransform

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

    本例效果图:



    代码文件:
    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
    
  • 相关阅读:
    POJ 2236 Wireless Network(并查集)
    POJ 2010 Moo University
    POJ 3614 Sunscreen(贪心,区间单点匹配)
    POJ 2184 Cow Exhibition(背包)
    POJ 1631 Bridging signals(LIS的等价表述)
    POJ 3181 Dollar Dayz(递推,两个long long)
    POJ 3046 Ant Counting(递推,和号优化)
    POJ 3280 Cheapest Palindrome(区间dp)
    POJ 3616 Milking Time(dp)
    POJ 2385 Apple Catching(01背包)
  • 原文地址:https://www.cnblogs.com/del/p/1220373.html
Copyright © 2011-2022 走看看