不管什么曲线命令, 到来路径中都会变成 Bezier 线; 也就是说路径中只有直线和 Bezier 线.

FlattenPath 和 WidenPath 都能够把路径中的 Bezier 线转换为近似的直线; 不同的是: 用 WidenPath 转换后貌似加宽了线, 其实它是转换成了一个包围路径的新路径(类似区域).



本例效果图:



代码文件:


unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls;typeTForm1 = class(TForm)RadioGroup1: TRadioGroup;procedure FormPaint(Sender: TObject);procedure FormCreate(Sender: TObject);procedure RadioGroup1Click(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
beginRadioGroup1.Items.CommaText := 'Path,FlattenPath,WidenPath';RadioGroup1.ItemIndex := 0;
end;procedure TForm1.FormPaint(Sender: TObject);
typeTPArr = array[0..0] of TPoint;TTArr = array[0..0] of Byte;
varpts: ^TPArr;types: ^TTArr;count: Integer;i,x,y: Integer;
beginCanvas.Font.Size := 150;Canvas.Font.Style := [fsBold];SetBkMode(Canvas.Handle, TRANSPARENT);BeginPath(Canvas.Handle);Canvas.TextOut(50, 0, 'D');Canvas.Arc(20, 20, 220, 220, 120, 120, 20, 120);EndPath(Canvas.Handle);Canvas.Pen.Width := 6;if RadioGroup1.ItemIndex = 1 then FlattenPath(Canvas.Handle);if RadioGroup1.ItemIndex = 2 then WidenPath(Canvas.Handle);Canvas.Pen.Color := clWhite;count := GetPath(Canvas.Handle, pts^, types^, 0);GetMem(pts, count*SizeOf(TPoint));GetMem(types, count);count := GetPath(Canvas.Handle, pts^, types^, count);Text := '路径中点的总数是: ' + IntToStr(count);StrokePath(Canvas.Handle);Canvas.Brush.Color := clRed;for i := 0 to count - 1 dobeginx := pts^[i].X;y := pts^[i].Y;Canvas.FillRect(Rect(x-1,y-1,x+1,y+1));end;FreeMem(pts);FreeMem(types);
end;procedure TForm1.RadioGroup1Click(Sender: TObject);
beginRepaint;
end;end.

窗体文件:


object Form1: TForm1Left = 352Top = 227Caption = 'Form1'ClientHeight = 215ClientWidth = 339Color = clBtnFaceFont.Charset = DEFAULT_CHARSETFont.Color = clWindowTextFont.Height = -11Font.Name = 'Tahoma'Font.Style = []OldCreateOrder = FalsePosition = poDesignedOnCreate = FormCreateOnPaint = FormPaintPixelsPerInch = 96TextHeight = 13object RadioGroup1: TRadioGroupLeft = 240Top = 80Width = 91Height = 127Caption = 'RadioGroup1'TabOrder = 0OnClick = RadioGroup1Clickend
end

关于描绘路径中的点, 参见: http://www.cnblogs.com/del/archive/2008/05/26/1207423.html


WinAPI: FlattenPath、WidenPath相关推荐

  1. WinAPI: GetLocalTime、SetLocalTime、SetSystemTime - 获取与设置系统时间

    为什么80%的码农都做不了架构师?>>>    //声明 GetLocalTime(var lpSystemTime: TSystemTime {TSystemTime 结构} ); ...

  2. WinAPI: GetDoubleClickTime、SetDoubleClickTime - 获取与设置鼠标双击间隔时间

    //声明 GetDoubleClickTime: UINT; {无参数; 返回鼠标双击间隔时间, 单位是毫秒}SetDoubleClickTime(Interval: UINT {依毫秒为单位的时间数 ...

  3. WinAPI: SetRectEmpty、IsRectEmpty

    SetRectEmpty: 使矩形为空; IsRectEmpty: 判断矩形是否为空; 所谓矩形为空就是矩形是无区域的, 或者说是 Right <= Left 或 Bottom <= To ...

  4. WinAPI: SetTimer、KillTimer - 创建与移除高性能定时器

    //创建定时器函数的声明: SetTimer(hWnd: HWND; {与定时器相关联的窗口句柄}nIDEvent: UINT; {指定一个非 0 的定时器标识符}uElapse: UINT; {指定 ...

  5. WinAPI: GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId

    {返回当前线程的虚拟句柄} GetCurrentThread: THandle; {返回当前线程 ID} GetCurrentThreadId: DWORD; {返回当前进程的虚拟句柄} GetCur ...

  6. 博客总目录(2007.11.12 - 2010.4.25)

    如果我的学习记录和历程能对你有所帮助, 我非常高兴; 但是 -- "万一" 不是高手.更不是大师, 只是利用工作之余学点东西, 并感觉学得挺吃力. 内容都是写时才会, 难免稚嫩, ...

  7. (转载博文)VC++API速查

    窗口处理 2.1 窗口简介 2.2.1 创建普通窗口(CreateWindow.CreateWindowEx) 2.2.2 关闭窗口(CloseWindow) 2.2.3 销毁窗口(DestroyWi ...

  8. 获取windows程序界面数据

    文章目录 结论 可以尝试的其他方向 最后的挣扎 基础知识 win7/win10查看某个进程的句柄数 句柄的概念 Windows MFC.SDK和API的区别和联系 Windows MFC(C++开发) ...

  9. 【外挂】API函数列表【链接】

    1.WinAPI: FindWindow.FindWindowEx - 查找窗口 2.WinAPI: GetWindowThreadProcessId - 获取指定窗口的进程 ID 或线程 ID 3. ...

最新文章

  1. 实现给一个DIV加阴影效果!
  2. flink checkpoint 恢复_Flink断点恢复机制
  3. Java客户端操作zookeeper:获取/节点的子节点代码示例
  4. ICCV 2019开源论文 | 捕捉图像DNA——单幅图像下可实现任意尺度自然变换
  5. oracle易忘函数用法(1)
  6. 中国牙膏产业深陷 “氟中毒”?
  7. 苹果断开电脑连接服务器无响应,mac电脑iTerm2链接linux服务器断线解决方案
  8. 华为可以升级鸿蒙的机型,首批升级鸿蒙机型提前泄露,华为这保密措施需要加强...
  9. 众善之源 or 万恶之源?详析微服务的好与坏
  10. 世界500百强企业中国的CEO对我们的忠告!!!!!我们要告别稚气了
  11. 追赶法matlab算法,追赶法matlab程序
  12. 天天生鲜项目——商品详情页
  13. python实用【大技巧】之Python手把手实现远程控制桌面
  14. 十个Win10使用小技巧,看看你知道哪些?
  15. 百度富文本编辑器上传文件到OSS
  16. 计算机应用参考文献,计算机应用领域英文参考文献 哪里有计算机应用领域参考文献...
  17. Gensim库的使用——Gensim库的核心概念介绍
  18. 我也写写致青春观后感
  19. 史蒂芬·柯维写给年轻人的高效工作秘笈
  20. 4月有8本SCIE期刊被剔除(附MDPI/Frontiers/Hindawi最新在检期刊)

热门文章

  1. DataGrid连接Access的快速分页法(2)——SQL语句的选用(升序与降序)
  2. Shiro源码学习之二
  3. C++中extern C的使用
  4. 【Qt】QtCreator导入cmake工程
  5. 【AI】caffe使用步骤(三):编写求解文件solver.prototxt
  6. vim删除多行_Vim 可视化模式入门 | Linux 中国
  7. python打印列表元素_python打印列表中指定元素的所有下标
  8. SpringBoot复习:5(配置绑定)
  9. Java学习总结:23
  10. void函数调用时显示不允许使用不完整的_C语言的角落——这些C语言不常用的特性你知道吗?...