转载:http://www.cnblogs.com/del/archive/2008/06/03/1212534.html

相似函数: SetWorldTransform



本例效果图:



代码文件:


unit Unit1;

interface

uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
RadioGroup1: TRadioGroup;
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} var cvs: TCanvas; Rgn: HRGN; procedure TForm1.FormCreate(Sender: TObject);
begin
cvs := TCanvas.Create;
cvs.Handle := GetDC(Handle);
RadioGroup1.Items.CommaText := '原始,横向移动,纵向移动,横向比例,纵向比例,放大,缩小,水平镜像,垂直镜像,横向斜切,纵向斜切,旋转';
RadioGroup1.ItemIndex := 0;
end; procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteObject(Rgn); cvs.Free;
end; procedure TForm1.FormPaint(Sender: TObject);
begin
{绘制}
cvs.Brush.Color := clSilver;
cvs.Brush.Style := bsDiagCross;
FillRgn(cvs.Handle, Rgn, cvs.Brush.Handle);
cvs.Brush.Color := clRed;
cvs.Brush.Style := bsSolid;
FrameRgn(cvs.Handle, Rgn, cvs.Brush.Handle, 2, 2);
end; procedure TForm1.RadioGroup1Click(Sender: TObject);
var
RgnDataSize: Integer; {区域数据缓冲区的大小}
RgnData: PRgnData; {区域数据指针}
TXF: TXForm; {坐标转换的矩阵结构}
begin
cvs.Font.Size := 120;
cvs.Font.Style := [fsBold];
SetBkMode(cvs.Handle, TRANSPARENT);
{建立路径} BeginPath(cvs.Handle);
cvs.TextOut(100, 0, 'F');
EndPath(cvs.Handle);
{将路径转换为区域}
Rgn := PathToRegion(cvs.Handle);
{获取区域数据}
RgnDataSize := GetRegionData(Rgn, 0, nil);
GetMem(RgnData, RgnDataSize);
GetRegionData(Rgn, RgnDataSize, RgnData);
case RadioGroup1.ItemIndex of
0: begin {原始效果, 无变换}
TXF.eM11 := 1;
TXF.eM12 := 0;
TXF.eM21 := 0;
TXF.eM22 := 1;
TXF.eDx := 0;
TXF.eDy := 0;
end;
1: begin
{右移 100}
TXF.eM11 := 1;
TXF.eM12 := 0;
TXF.eM21 := 0;
TXF.eM22 := 1;
TXF.eDx := 100;
TXF.eDy := 0;
end;
2: begin
{上移 40}
TXF.eM11 := 1;
TXF.eM12 := 0;
TXF.eM21 := 0;
TXF.eM22 := 1;
TXF.eDx := 0;
TXF.eDy := -40;
end;
3: begin
{横向放大 1.5}
TXF.eM11 := 1.5;
TXF.eM12 := 0;
TXF.eM21 := 0;
TXF.eM22 := 1;
TXF.eDx := 0;
TXF.eDy := 0;
end;
4: begin
{纵向放大 1.5}
TXF.eM11 := 1;
TXF.eM12 := 0;
TXF.eM21 := 0;
TXF.eM22 := 1.5;
TXF.eDx := 0;
TXF.eDy := 0;
end;
5: begin
{整体放大 1.5 倍}
TXF.eM11 := 1.5;
TXF.eM12 := 0;
TXF.eM21 := 0;
TXF.eM22 := 1.5;
TXF.eDx := 0;
TXF.eDy := 0;
end;
6: begin
{整体缩小一半}
TXF.eM11 := 0.5;
TXF.eM12 := 0;
TXF.eM21 := 0;
TXF.eM22 := 0.5;
TXF.eDx := 0;
TXF.eDy := 0;
end;
7: begin
{水平镜像}
TXF.eM11 := -1;
TXF.eM12 := 0;
TXF.eM21 := 0;
TXF.eM22 := 1;
TXF.eDx := 200;
{需要右移一些才能看到}
TXF.eDy := 0;
end;
8: begin {垂直镜像}
TXF.eM11 := 1;
TXF.eM12 := 0;
TXF.eM21 := 0;
TXF.eM22 := -1;
TXF.eDx := 0;
TXF.eDy := 200;
{需要下移一些才能看到}
end; 9: begin {横向斜切}
TXF.eM11 := 1;
TXF.eM12 := 0.75;
TXF.eM21 := 0;
TXF.eM22 := 1;
TXF.eDx := 0;
TXF.eDy := 0;
end;
10: begin
{纵向斜切}
TXF.eM11 := 1;
TXF.eM12 := 0;
TXF.eM21 := 0.75;
TXF.eM22 := 1;
TXF.eDx := 0;
TXF.eDy := 0;
end;
11: begin
{旋转 30 度}
TXF.eM11 := Cos(30*PI/180);
TXF.eM12 := Sin(30*PI/180);
TXF.eM21 := -Sin(30*PI/180);
TXF.eM22 := Cos(30*PI/180);
TXF.eDx := 0;
TXF.eDy := 0;
end;
end;
{执行变换并重绘}
Rgn := ExtCreateRegion(@TXF, RgnDataSize, RgnData^);
Repaint;
FreeMem(RgnData);
end; end.



窗体文件:



object
Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 259
ClientWidth = 433
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poDesktopCenter
OnCreate = FormCreate
OnDestroy = FormDestroy
OnPaint = FormPaint
PixelsPerInch = 96
TextHeight = 13
object RadioGroup1: TRadioGroup
Left = 320
Top = 8
Width = 103
Height = 243
Caption = 'RadioGroup1'
TabOrder = 0
OnClick = RadioGroup1Click
end
end

TXForm 结构定义在 Windows 单元的 12205 - 12213 行(Delphi 2007).

WinAPI: ExtCreateRegion - 区域变换的更多相关文章

  1. HTML 导航框架 (使用 Frame )

    文章出处  :  http://blog.sina.com.cn/s/blog_6f6d07f80100oqlt.html  (本文转自此博客) 在浏览网页时,我们经常会看到一个导航条,当点击导航条上 ...

  2. Halcon 10.0 Sample:完整性检查(圆形)

    * ball.hdev: Inspection of Ball Bonding * 球接合检查 Comment Time:// *核心思想:.白色区域用作自动ROI,黑色区域是目标 * .Openin ...

  3. 台球游戏的核心算法和AI(2)

    前言: 最近研究了box2dweb, 觉得自己编写Html5版台球游戏的时机已然成熟. 这也算是圆自己的一个愿望, 一个梦想. 承接该序列的相关博文: • 台球游戏核心算法和AI(1) 同时结合htm ...

  4. GDI+编程说明及小结

    原文地址:http://blog.csdn.net/byxdaz/article/details/5972759 GDI+(Graphics Device Interface Plus图形设备接口加) ...

  5. 目标检测之R-CNN系列

    Object Detection,在给定的图像中,找到目标图像的位置,并标注出来. 或者是,图像中有那些目标,目标的位置在那.这个目标,是限定在数据集中包含的目标种类,比如数据集中有两种目标:狗,猫. ...

  6. GDI+编程小结

    GDI+(Graphics Device Interface Plus图形设备接口加)是Windows XP和Windows Server 2003操作系统的子系统,也是.NET框架的重要组成部分,负 ...

  7. d3dx9库函数

    这几天参考了csdn上大坡先生()整理的d3dx9的库函数,我做了一些机械的事情.就算过年练打字了.以下为我整理的d3dx9库函数简略版,以后除了msdn外,存档备用: D3DXCOLOR* D3DX ...

  8. 物体检测丨从R-CNN到Mask R-CNN

    这篇blog是我刚入目标检测方向,导师发给我的文献导读,深入浅出总结了object detection two-stage流派Faster R-CNN的发展史,读起来非常有趣.我一直想翻译这篇博客,在 ...

  9. [视觉] 基于YoloV3的实时摄像头记牌器

    基于YoloV3的实时摄像头记牌器 github:https://github.com/aoru45/cards_recognition_recorder_pytorch 最终效果 数据准备 数据获取 ...

随机推荐

  1. .net截取两个字符串中间的内容

    做模拟登录时,需要截取html代码中的名字,返回的字符串内容如下 <span class="welcome">您好<span style="font-s ...

  2. RESTful WebService入门(转)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lavasoft.blog.51cto.com/62575/229206 REST ...

  3. git托管代码随笔--运用ssh传输,不用每次提交频繁输入github账号密码

    遇到问题:在使用git bash的时候 每次git push均要输入账号密码. 问题原因:使用的是http传输,需用ssh传输. 解决方法: 1.设置密钥 ssh-keygen -t rsa -C & ...

  4. 【转】高斯消元模板 by kuangbin

    写的很好,注释很详细,很全面. 原blog地址:http://www.cnblogs.com/kuangbin/archive/2012/09/01/2667044.html #include< ...

  5. Java设计模式-迭代子模式(Iterator)

    顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松.这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是迭代器对象,用于对聚集对 ...

  6. fedora安装软件

    jdk 1.下载rpm包 注意32位还是64位,注意是rpm格式 2.安装 sudo rpm -ivh jdk.rpm sudo update-alternatives --config java # ...

  7. P1391 走廊泼水节

    时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景  话说,中中带领的OIER们打算举行一次冬季泼水节,当然这是要秘密进行的,绝对不可以让中中知道.不过中中可是老 ...

  8. SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程

    相关学习资料 http://www.360doc.com/content/10/0602/08/1466362_30787868.shtml http://www.gxu.edu.cn/college ...

  9. Message

    * Defines a message containing a description and arbitrary data object that can be* sent to a {@link ...

  10. iOS系统navigationBar背景色,文字颜色处理

    - (void)setRightBarButtonItem { // Create done Button UIBarButtonItem *doneButton = [[UIBarButtonIte ...