首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

再學GDI+[33]: 畫筆矩陣幾何變換 - SetTransform 完整仿射變換控制

     編輯:Delphi

前言

TGPPen.SetTransform 接受 TGPMatrix 實現畫筆的完整仿射變換(旋轉、縮放、傾斜、平移)。注意:畫筆矩陣忽略 dx、dy 平移分量,僅應用線性變換部分。建議搭配 LineCapRound 獲得最佳視覺效果。

矩陣四參數控制對應

參數矩陣位置幾何意義TrackBar 對應
m11[0,0]X 縮放 + Y 傾斜耦合TrackBar1
m12[0,1]X 傾斜TrackBar2
m21[1,0]Y 傾斜TrackBar3
m22[1,1]Y 縮放 + X 傾斜耦合TrackBar4

四 TrackBar 矩陣控制台 + 重置按鈕

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);  {dx,dy=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;

執行效果預覽

畫筆矩陣變換

畫筆矩陣忽略平移的含義

  • 矩陣最後兩參數 dx, dy 被忽略(永遠視為 0,0)
  • 線條幾何形狀變換但位置不變
  • 若需移動線條位置,請改變 DrawLine 的端點座標
  • 此設計確保線帽、虛線模式相對線條幾何正確

表單定義檔

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 ... {右側四 TrackBar + 重置按鈕}
end
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved