几何变换也就是 Matrix 变换, 画笔的 Matrix 会忽略 dx、dy 平移参数; 选择 LineCapRound 线帽效果比较好.



本例效果图:



代码文件:


unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, ComCtrls, StdCtrls, ExtCtrls;typeTForm1 = class(TForm)Panel1: TPanel;Button1: TButton;TrackBar1: TTrackBar;TrackBar2: TTrackBar;TrackBar3: TTrackBar;TrackBar4: TTrackBar;procedure FormCreate(Sender: TObject);procedure FormPaint(Sender: TObject);procedure TrackBar1Change(Sender: TObject);procedure TrackBar2Change(Sender: TObject);procedure TrackBar3Change(Sender: TObject);procedure TrackBar4Change(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}uses GDIPOBJ, GDIPAPI;procedure TForm1.FormCreate(Sender: TObject);
constn = 40;
beginTrackBar1.Min := -n;TrackBar1.Max := n;TrackBar2.Min := -n;TrackBar2.Max := n;TrackBar3.Min := -n;TrackBar3.Max := n;TrackBar4.Min := -n;TrackBar4.Max := n;TrackBar1.Position := 10;TrackBar2.Position := 0;TrackBar3.Position := 0;TrackBar4.Position := 10;Button1.OnClick := FormCreate;
end;procedure TForm1.FormPaint(Sender: TObject);
varg: TGPGraphics;b: TGPBrush;p: TGPPen;matrix: TGPMatrix;m11, m12, m21, m22: Single;
beging := TGPGraphics.Create(Canvas.Handle);b := TGPHatchBrush.Create(HatchStyleLargeGrid, aclForestGreen);p := TGPPen.Create(b, 16);m11 := TrackBar1.Position / 10;m12 := TrackBar2.Position / 10;m21 := TrackBar3.Position / 10;m22 := TrackBar4.Position / 10;matrix := TGPMatrix.Create(m11, m12, m21, m22, 0, 0);p.SetTransform(matrix);p.SetStartCap(LineCapRound);p.SetEndCap(LineCapRound);g.DrawLine(p, 30, 30, ClientWidth - Panel1.Width - 30, ClientHeight - 30);matrix.Free;b.Free;p.Free;g.Free;
end;procedure TForm1.TrackBar1Change(Sender: TObject);
beginRepaint;
end;procedure TForm1.TrackBar2Change(Sender: TObject);
beginRepaint;
end;procedure TForm1.TrackBar3Change(Sender: TObject);
beginRepaint;
end;procedure TForm1.TrackBar4Change(Sender: TObject);
beginRepaint;
end;end.

窗体文件:


object Form1: TForm1Left = 0Top = 0Caption = 'Form1'ClientHeight = 184ClientWidth = 327Color = clBtnFaceFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -11Font.Name = 'Tahoma'Font.Style = []OldCreateOrder = FalsePosition = poDesktopCenterOnCreate = FormCreateOnPaint = FormPaintPixelsPerInch = 96TextHeight = 13object Panel1: TPanelLeft = 228Top = 0Width = 99Height = 184Align = alRightTabOrder = 0ExplicitLeft = 225ExplicitHeight = 170object Button1: TButtonLeft = 14Top = 8Width = 75Height = 25Caption = #21021#22987#21270TabOrder = 0endobject TrackBar1: TTrackBarLeft = 0Top = 39Width = 100Height = 20ShowSelRange = FalseTabOrder = 1OnChange = TrackBar1Changeendobject TrackBar2: TTrackBarLeft = 0Top = 72Width = 100Height = 20ShowSelRange = FalseTabOrder = 2OnChange = TrackBar2Changeendobject TrackBar3: TTrackBarLeft = 0Top = 106Width = 100Height = 20ShowSelRange = FalseTabOrder = 3OnChange = TrackBar3Changeendobject TrackBar4: TTrackBarLeft = 0Top = 140Width = 100Height = 20ShowSelRange = FalseTabOrder = 4OnChange = TrackBar4Changeendend
end

再学 GDI+[33]: TGPPen - 画笔的几何变换 - SetTransform相关推荐

  1. 再学 GDI+[25]: TGPPen - 宽度、颜色与线帽

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

  2. 再学 GDI+[36]: TGPPen - SetLineCap

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

  3. 再学 GDI+[57]: 路径 - Widen

    为什么80%的码农都做不了架构师?>>>    路径的 Widen 方法可以把路径中的线, 根据指定画笔的宽度与样式, 转换为一个范围(有点类似区域); 但转换后再描绘路径就只能使用 ...

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

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

  5. 再学 GDI+[11]: DrawCurve - 绘制曲线

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

  6. 再学 GDI+[7]: DrawLines - 绘制一组直线

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

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

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

  8. 再学 GDI+[83]: TGPImage(3) - 平行四边形变换

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

  9. 再学 GDI+[60]: TGPGraphics.SetSmoothingMode - 绘图质量

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

最新文章

  1. html中hover有静止的命令,我可以通过JavaScript禁用CSS:hover效果吗?
  2. 步步为营 .NET 代码重构学习笔记 十一
  3. python基本使用-python基本用法
  4. 公共无线网络多陷阱 ***称15分钟盗银行账号密码
  5. linux c 多文件编译,Linuxc - 多c文件程序编译执行
  6. 现在进行时和一般现在时的将来时态_39
  7. 第12章[12.3] Ext JSGrid中的超链接列及其功能实现
  8. 为什么JS中0.1+0.2 != 0.3
  9. springMVC使用拦截器针对控制器方法做预处理、后处理、资源清理
  10. [myeclipse] 官方中文网站
  11. C++ 0x/11学习笔记
  12. 杭州电子科技大学 计算机专硕复试分数线,2020杭州电子科技大学考研复试分数线已公布...
  13. Java swing简易浏览器(其二)前进后退与收藏夹实现
  14. 【C语言学习】C语言初探
  15. mysql explain 的using where 到底是什么意思?
  16. SAXReader简单实例分析
  17. Python之建模数值逼近篇--一维插值
  18. 关于 imtra-mart 的 新研究
  19. 操作系统——显示器的驱动
  20. 腾讯为何急于收购“弃子”搜狗 ?

热门文章

  1. Java网络编程之简单UDP通信
  2. 高德拉特难题:悬赏5000美金的一道作业排序问题
  3. overflow与min-width
  4. 交换机和路由器各自的实现原理
  5. Ignite的jdbc与网格的连接方式的查询性能对比
  6. ViewPager一屏显示多个item,及边缘滑动事件优化
  7. Datawindow.net 子数据窗口出错
  8. 【翻译】Ext JS最新技巧——2014-8-13
  9. sublime Text 2 配置以及 Python环境搭建
  10. 新书《路由器配置与管理完全手册——Cisco篇》目录抢鲜暴光