再学 GDI+[83]: TGPImage(3) - 平行四边形变换
为什么80%的码农都做不了架构师?>>>
本例效果图:
代码文件:
unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs;typeTForm1 = 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;varForm1: TForm1;implementation{$R *.dfm}uses GDIPOBJ, GDIPAPI;varimg: TGPImage;pts: array[0..2] of TGPPoint;flag: Integer = -1;procedure TForm1.FormCreate(Sender: TObject);
varw,h: Integer;
beginimg := 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);
beginimg.Free;
end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
vari: Integer;
beginfor i := 0 to Length(pts) doif PtInRect(Bounds(pts[i].X-3, pts[i].Y-3, 6, 6), Point(X, Y)) thenbeginflag := i;Exit;end;
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
beginif flag = -1 then Exit;pts[flag] := MakePoint(X, Y);Repaint;
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
beginflag := -1;
end;procedure TForm1.FormPaint(Sender: TObject);
varg: TGPGraphics;p: TGPPen;i: Integer;
beging := 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: TForm1Left = 0Top = 0Caption = 'Form1'ClientHeight = 206ClientWidth = 307Color = clBtnFaceFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -11Font.Name = 'Tahoma'Font.Style = []OldCreateOrder = FalsePosition = poDesktopCenterOnCreate = FormCreateOnDestroy = FormDestroyOnMouseDown = FormMouseDownOnMouseMove = FormMouseMoveOnMouseUp = FormMouseUpOnPaint = FormPaintPixelsPerInch = 96TextHeight = 13
end
转载于:https://my.oschina.net/hermer/blog/319935
再学 GDI+[83]: TGPImage(3) - 平行四边形变换相关推荐
- 再学 GDI+[81]: TGPImage(1) - 显示图像
已知 GDI+ 可以支持的图像格式: BMP.JPEG.GIF.TIFF.PNG.ICO.WMF.EMF TGPGraphics.DrawImage 函数有太多重载了, 一起列在这吧: functio ...
- mysql img格式缩放,再学 GDI+[89]: TGPImage(9) - 图像缩放时的质量(算法)
本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Co ...
- 再学 GDI+[91]: TGPImage(11) - 转灰度图像
本例效果图: 代码文件: unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Contr ...
- 再学 GDI+[94]: TGPImage(14) - 增减图像的红、绿、蓝三色的成分
为什么80%的码农都做不了架构师?>>> 本例效果图: 代码文件: unit Unit1;interfaceusesWindows, Messages, SysUtils, V ...
- 再学 GDI+[86]: TGPImage(6) - 拖动图像
为什么80%的码农都做不了架构师?>>> 本例效果图: 代码文件: unit Unit1;interfaceusesWindows, Messages, SysUtils, V ...
- 再学 GDI+[98]: TGPImage(18) - 获取 GDI+ 图像格式对应的 GUID
和在 Net 中不同的是, 在具体指定图像格式时, 这里常常需要的不是格式名称, 而是格式的 GUID; 知道了格式名称, 用 GetEncoderClsid 函数可以获取格式的 GUID; GetE ...
- 再学 GDI+[79]: 区域(8) - Transform - 区域的 Matrix 变换
矩阵变换(Matrix)功能很强大, 这里只是旋转了一下. 本例效果图: 代码文件: unit Unit1;interfaceusesWindows, Messages, SysUtils, Vari ...
- 再学 GDI+[56]: 路径 - Warp
为什么80%的码农都做不了架构师?>>> 通过路径的 Warp 方法可以让路径在一个范围内(四个点决定的范围)变换; 第一个参数可以是 3 个点或 4 个点的数组, 如果是 3 ...
- 再学 GDI+[33]: TGPPen - 画笔的几何变换 - SetTransform
几何变换也就是 Matrix 变换, 画笔的 Matrix 会忽略 dx.dy 平移参数; 选择 LineCapRound 线帽效果比较好. 本例效果图: 代码文件: unit Unit1;inter ...
最新文章
- nginx+iis实现负载均衡
- 事务(ACID)、并发一致性问题(丢失修改、读脏数据、不可重复读、幻影读)、封锁(封锁粒度、类型、协议、MySQL 隐式与显示锁定)
- 安卓个人信息界面_LOL手游上架,安卓+IOS安装教程
- linux高端内存申请,Linux高端内存
- Java中集合(四)LinkedList
- 亮点抢先看 | 旷视科技11篇 ICCV 2019 论文概览
- MATLAB 线性运算之图像相加去噪
- 动态规划-有关计数问题的DP-多重集组合数
- VS工程下的tlb, tlh, tli文件说明(COM)
- 大事件,Java被超越了,2021年5月TIOBE编程语言排行榜出炉
- 《通信电子电路》第一章——小信号调谐放大器
- 怎样在两台计算机之间建立硬盘共享,如何让两台电脑硬盘共享在一起
- pandas处理时序数据
- 儿童学计算机编程好处,孩子学编程的好处是什么
- 社群运营怎么做更有效?
- Python—遇到的问题,使用PyPDF2转化pdf时候遇到的各种问题。
- p5js动漫角色临摹
- python 办公常用一:从文本文件中提取手机号码
- KEIL仿真和vspd
- java中的反射详解