zoukankan      html  css  js  c++  java
  • GdiPlus[9]: IGPTextureBrush 变换


    TranslateTransform: 平移;
    ScaleTransform: 放缩;
    RotateTransform: 旋转;

    通过 MultiplyTransform 方法和 Transform 属性, 能完成包括上述变换在内的更多变换.

    ResetTransform 方法是重置变换.

    这些方法和属性, 在 IGPGraphics 中都有, 在 IGPGraphics 中详细学习更合适些.

    测试效果图:



    代码文件:

    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, StdCtrls, ComCtrls;
    
    type
      TForm1 = class(TForm)
        TrackBar1: TTrackBar;
        TrackBar2: TTrackBar;
        TrackBar3: TTrackBar;
        TrackBar4: TTrackBar;
        TrackBar5: TTrackBar;
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        PaintBox1: TPaintBox;
        procedure TrackBar1Change(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure PaintBox1Paint(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses GdiPlus, GdiPlusHelpers;
    
    var
      Brush1: IGPTextureBrush;
      Image: IGPImage;
      Rect: TGPRect;
      RX: Single = 1.0;
      RY: Single = 1.0;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      TrackBar1.Min := -200;
      TrackBar1.Max := 200;
    
      TrackBar2.Min := -200;
      TrackBar2.Max := 200;
    
      TrackBar3.Min := -99;
      TrackBar3.Max := 99;
    
      TrackBar4.Min := -99;
      TrackBar4.Max := 99;
    
      TrackBar5.Min := -180;
      TrackBar5.Max := 180;
    
      TrackBar2.OnChange := TrackBar1.OnChange;
      TrackBar3.OnChange := TrackBar1.OnChange;
      TrackBar4.OnChange := TrackBar1.OnChange;
      TrackBar5.OnChange := TrackBar1.OnChange;
    
      Image := TGPImage.Create('C:\GdiPlusImg\HouseAndTree.gif');
      Brush1 := TGPTextureBrush.Create(Image);
      Rect.Initialize(0, 0, PaintBox1.Width, PaintBox1.Height);
    end;
    
    procedure TForm1.PaintBox1Paint(Sender: TObject);
    begin
      Brush1.ResetTransform;
      Brush1.TranslateTransform(TrackBar1.Tag, TrackBar2.Tag);
      Brush1.ScaleTransform(RX + TrackBar3.Tag / 100, RY + TrackBar4.Tag / 100);
      Brush1.RotateTransform(TrackBar5.Tag);
      PaintBox1.ToGPGraphics.FillRectangle(Brush1, Rect);
    end;
    
    procedure TForm1.TrackBar1Change(Sender: TObject);
    begin
      with TTrackBar(Sender) do Tag := Position;
      PaintBox1.Repaint;
    end;
    
    end.
    

    窗体文件:

    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 234
      ClientWidth = 423
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      OnCreate = FormCreate
      PixelsPerInch = 96
      TextHeight = 13
      object Label1: TLabel
        Left = 259
        Top = 13
        Width = 28
        Height = 13
        Caption = #24179#31227':'
      end
      object Label2: TLabel
        Left = 259
        Top = 90
        Width = 28
        Height = 13
        Caption = #25918#32553':'
      end
      object Label3: TLabel
        Left = 259
        Top = 169
        Width = 28
        Height = 13
        Caption = #26059#36716':'
      end
      object PaintBox1: TPaintBox
        Left = 8
        Top = 8
        Width = 225
        Height = 217
        OnPaint = PaintBox1Paint
      end
      object TrackBar1: TTrackBar
        Left = 251
        Top = 32
        Width = 169
        Height = 23
        ShowSelRange = False
        TabOrder = 0
        OnChange = TrackBar1Change
      end
      object TrackBar2: TTrackBar
        Left = 251
        Top = 56
        Width = 169
        Height = 23
        ShowSelRange = False
        TabOrder = 1
      end
      object TrackBar3: TTrackBar
        Left = 251
        Top = 109
        Width = 169
        Height = 23
        ShowSelRange = False
        TabOrder = 2
      end
      object TrackBar4: TTrackBar
        Left = 251
        Top = 133
        Width = 169
        Height = 23
        ShowSelRange = False
        TabOrder = 3
      end
      object TrackBar5: TTrackBar
        Left = 251
        Top = 188
        Width = 169
        Height = 23
        ShowSelRange = False
        TabOrder = 4
      end
    end
    
  • 相关阅读:
    使用pynlpir增强jieba分词的准确度
    graph easy绘制ascii简易流程图
    kubernetes版本融合解决方案
    设计的一些kubernetes面试题目
    使用go-template自定义kubectl get输出
    docker、oci、runc以及kubernetes梳理
    启动docker容器时的Error response from daemon: devmapper: Error mounting: invalid argument. 错误解决
    kubernetes endpoint一会消失一会出现的问题剖析
    docker启动容器报错: could not synchronise with container process: not a directory
    docker中执行sed: can't move '/etc/resolv.conf73UqmG' to '/etc/resolv.conf': Device or resource busy错误的处理原因及方式
  • 原文地址:https://www.cnblogs.com/del/p/1623329.html
Copyright © 2011-2022 走看看