文档章节

GdiPlus[9]: IGPTextureBrush 变换

涂孟超
 涂孟超
发布于 2014/09/26 15:31
字数 447
阅读 3
收藏 0

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

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/12/14/1623329.html

涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
GDI+里面的问题。。。。。。。。。。

error C2248: “Gdiplus::Bitmap::Bitmap”: 无法访问 private 成员(在“Gdiplus::Bitmap”类中声明) 1> c:\program files\microsoft sdks\windows\v7.0a\include\gdiplusheaders.h(630) : ......

xxdd
2013/10/24
74
0
MFC用GDI+动感歌词的制作

源代码:http://download.csdn.net/detail/nuptboyzhb/4219669 源代码: 1. 插入一个对话框的资源,删除默认控件,并为对话框创建一个类,命名为ClyricDlg; 2. 在对话框的头文件中添加GDI+相...

长平狐
2012/10/08
259
0
用C++实现半透明按钮控件(PNG,GDI+)

使用MFC实现上面的按钮半透明效果能看到父窗口中的内容,上面是效果图(一个是带背景图片的、另一个是不带的)。 控件继承自CWnd类(彩色的部分是窗口的背景图片、按钮是PNG图片,第二个图标是鼠...

shzwork
09/17
4
0
vs 2005 添加GDI配置

在VS2005当中由于自带了GDI+的开发包,所以不需要在安装GDI开发包,这些头文件的位置由VS中的$(WindowsSdkDir)/include自动包含进来了 下午自己添加了好几次,总是出现有报错,,在 stdafx.h...

种地瓜
2015/12/08
133
0
MFC边框重绘

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 pragma once incl......

江河海流
2016/01/30
638
0

没有更多内容

加载失败,请刷新页面

加载更多

Redis缓存NoSQL

redis的应用场景有哪些 1、会话缓存(最常用) 2、消息队列,比如支付 3、活动排行榜或计数 4、发布、订阅消息(消息通知) 5、商品列表、评论列表等

BobwithB
14分钟前
2
0
「绘画技巧」一分钟画出动漫人物的喜怒哀乐中“喜”的各种表情

「绘画技巧」一分钟画出动漫人物的喜怒哀乐中“喜”的各种表情 表情拥有着可以凸显动漫人物情绪和主张的魔力,表情渲染整个环境。那么今天来和大家一起分享自己整理收集动漫人物喜怒哀乐中的...

知北
18分钟前
3
0
从流中的三种求和方式谈起

//使用reduce()方法int reduce = Arrays.asList(ins).stream().reduce(0, Integer::sum);//Collectors类的工厂方法,收集器int collect1 = Arrays.asList(ins).stream().collect(Colle......

我的眼里只有眼屎
19分钟前
2
0
File类的使用(文件与文件夹,获取,判断存在,删除,)

//File类的使用 public static void main(String[] args) throws IOException, ClassNotFoundException { //test3();// File f = new File("E:\\资料\\第二阶段\\d......

zhengzhixiang
22分钟前
2
0
58到家MySQL军规升级版

转载 2018-03-30 58到家DBA 架构师之路 一、基础规范 表存储引擎必须使用InnoDB 表字符集默认使用utf8,必要时候使用utf8mb4 解读: 通用,无乱码风险,汉字3字节,英文1字节 utf8...

xiaolyuh
30分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部