为什么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) - 平行四边形变换相关推荐

  1. 再学 GDI+[81]: TGPImage(1) - 显示图像

    已知 GDI+ 可以支持的图像格式: BMP.JPEG.GIF.TIFF.PNG.ICO.WMF.EMF TGPGraphics.DrawImage 函数有太多重载了, 一起列在这吧: functio ...

  2. mysql img格式缩放,再学 GDI+[89]: TGPImage(9) - 图像缩放时的质量(算法)

    本例效果图: 代码文件: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Co ...

  3. 再学 GDI+[91]: TGPImage(11) - 转灰度图像

    本例效果图: 代码文件: unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Contr ...

  4. 再学 GDI+[94]: TGPImage(14) - 增减图像的红、绿、蓝三色的成分

    为什么80%的码农都做不了架构师?>>>    本例效果图: 代码文件: unit Unit1;interfaceusesWindows, Messages, SysUtils, V ...

  5. 再学 GDI+[86]: TGPImage(6) - 拖动图像

    为什么80%的码农都做不了架构师?>>>    本例效果图: 代码文件: unit Unit1;interfaceusesWindows, Messages, SysUtils, V ...

  6. 再学 GDI+[98]: TGPImage(18) - 获取 GDI+ 图像格式对应的 GUID

    和在 Net 中不同的是, 在具体指定图像格式时, 这里常常需要的不是格式名称, 而是格式的 GUID; 知道了格式名称, 用 GetEncoderClsid 函数可以获取格式的 GUID; GetE ...

  7. 再学 GDI+[79]: 区域(8) - Transform - 区域的 Matrix 变换

    矩阵变换(Matrix)功能很强大, 这里只是旋转了一下. 本例效果图: 代码文件: unit Unit1;interfaceusesWindows, Messages, SysUtils, Vari ...

  8. 再学 GDI+[56]: 路径 - Warp

    为什么80%的码农都做不了架构师?>>>    通过路径的 Warp 方法可以让路径在一个范围内(四个点决定的范围)变换; 第一个参数可以是 3 个点或 4 个点的数组, 如果是 3 ...

  9. 再学 GDI+[33]: TGPPen - 画笔的几何变换 - SetTransform

    几何变换也就是 Matrix 变换, 画笔的 Matrix 会忽略 dx.dy 平移参数; 选择 LineCapRound 线帽效果比较好. 本例效果图: 代码文件: unit Unit1;inter ...

最新文章

  1. nginx+iis实现负载均衡
  2. 事务(ACID)、并发一致性问题(丢失修改、读脏数据、不可重复读、幻影读)、封锁(封锁粒度、类型、协议、MySQL 隐式与显示锁定)
  3. 安卓个人信息界面_LOL手游上架,安卓+IOS安装教程
  4. linux高端内存申请,Linux高端内存
  5. Java中集合(四)LinkedList
  6. 亮点抢先看 | 旷视科技11篇 ICCV 2019 论文概览
  7. MATLAB 线性运算之图像相加去噪
  8. 动态规划-有关计数问题的DP-多重集组合数
  9. VS工程下的tlb, tlh, tli文件说明(COM)
  10. 大事件,Java被超越了,2021年5月TIOBE编程语言排行榜出炉
  11. 《通信电子电路》第一章——小信号调谐放大器
  12. 怎样在两台计算机之间建立硬盘共享,如何让两台电脑硬盘共享在一起
  13. pandas处理时序数据
  14. 儿童学计算机编程好处,孩子学编程的好处是什么
  15. 社群运营怎么做更有效?
  16. Python—遇到的问题,使用PyPDF2转化pdf时候遇到的各种问题。
  17. p5js动漫角色临摹
  18. python 办公常用一:从文本文件中提取手机号码
  19. KEIL仿真和vspd
  20. java中的反射详解

热门文章

  1. 听说你们想学做品牌Gif动画海报?
  2. 从无到有写一个运维APP(二)
  3. 在python中配置MySQL数据库
  4. 【hadoop2.6.0】利用Hadoop的 Java API
  5. 标准日本语 09_002
  6. DHCP中继以及DHCP数据库的备份和还原
  7. 关于《设计模式》这本书(三)——Proxy模式
  8. 华为畅享8可以云闪付吗_华为Mate40Pro不如小米11的8个理由,这些差距无法忽视,懂了吗...
  9. Anaconda中文版
  10. python-常见数据类型及其方法