博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
再学 GDI+[83]: TGPImage(3) - 平行四边形变换
阅读量:5983 次
发布时间:2019-06-20

本文共 2662 字,大约阅读时间需要 8 分钟。

  hot3.png

本例效果图:
26153432_GL7V.gif

代码文件:

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs;type  TForm1 = class(TForm)    procedure FormPaint(Sender: TObject);    procedure FormCreate(Sender: TObject);    procedure FormDestroy(Sender: TObject);    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);  end;var  Form1: TForm1;implementation{$R *.dfm}uses GDIPOBJ, GDIPAPI;var  img: TGPImage;  pts: array[0..2] of TGPPoint;  flag: Integer = -1;procedure TForm1.FormCreate(Sender: TObject);var  w,h: Integer;begin  img := TGPImage.Create('C:\temp\test.jpg');  w := img.GetWidth;  h := img.GetHeight;  pts[0] := MakePoint((ClientWidth - w) div 2 + w, (ClientHeight - h) div 2);  pts[1] := MakePoint((ClientWidth - w) div 2, (ClientHeight - h) div 2);  pts[2] := MakePoint((ClientWidth - w) div 2 + w, (ClientHeight - h) div 2 + h);  DoubleBuffered := True;end;procedure TForm1.FormDestroy(Sender: TObject);begin  img.Free;end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);var  i: Integer;begin  for i := 0 to Length(pts) do    if PtInRect(Bounds(pts[i].X-3, pts[i].Y-3, 6, 6), Point(X, Y)) then    begin      flag := i;      Exit;    end;end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);begin  if flag = -1 then Exit;  pts[flag] := MakePoint(X, Y);  Repaint;end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  flag := -1;end;procedure TForm1.FormPaint(Sender: TObject);var  g: TGPGraphics;  p: TGPPen;  i: Integer;begin  g := TGPGraphics.Create(Self.Canvas.Handle);  p := TGPPen.Create(aclRed);  {第一点: 右上角; 第二点: 左上角; 第三点: 右下角; 第四点将根据平行四边形计算; 只能是三个点.}  g.DrawImage(img, PGPPoint(@pts), Length(pts));  for i := 0 to Length(pts)-1 do g.DrawRectangle(p, pts[i].X-3, pts[i].Y-3, 6, 6);  p.Free;  g.Free;end;end.
窗体文件:

object Form1: TForm1  Left = 0  Top = 0  Caption = 'Form1'  ClientHeight = 206  ClientWidth = 307  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  OnMouseDown = FormMouseDown  OnMouseMove = FormMouseMove  OnMouseUp = FormMouseUp  OnPaint = FormPaint  PixelsPerInch = 96  TextHeight = 13end

转载于:https://my.oschina.net/hermer/blog/319935

你可能感兴趣的文章
深入浅出JavaScript (五) 详解Document.write()方法
查看>>
Beta冲刺——day6
查看>>
代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能
查看>>
关于在VS2005中编写DLL遇到 C4251 警告的解决办法
查看>>
我的友情链接
查看>>
IDE---Python IDE之Eric5在window下的安装
查看>>
基本安装lnmp环境
查看>>
logstash消费阿里云kafka消息
查看>>
Oracle——条件控制语句
查看>>
day-6 and day-7:面向对象
查看>>
CSU Double Shortest Paths 湖南省第十届省赛
查看>>
webgl像机世界
查看>>
php正则怎么使用(最全最细致)
查看>>
javascript数学运算符
查看>>
LC.155. Min Stack(非优化,两个stack 同步 + -)
查看>>
交互设计[3]--点石成金
查看>>
SCCM TP4部署Office2013
查看>>
bootloader功能介绍/时钟初始化设置/串口工作原理/内存工作原理/NandFlash工作原理...
查看>>
利用console控制台调试php代码
查看>>
讲解sed用法入门帖子
查看>>