WinAPI: FlattenPath、WidenPath
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相关推荐
- WinAPI: GetLocalTime、SetLocalTime、SetSystemTime - 获取与设置系统时间
为什么80%的码农都做不了架构师?>>> //声明 GetLocalTime(var lpSystemTime: TSystemTime {TSystemTime 结构} ); ...
- WinAPI: GetDoubleClickTime、SetDoubleClickTime - 获取与设置鼠标双击间隔时间
//声明 GetDoubleClickTime: UINT; {无参数; 返回鼠标双击间隔时间, 单位是毫秒}SetDoubleClickTime(Interval: UINT {依毫秒为单位的时间数 ...
- WinAPI: SetRectEmpty、IsRectEmpty
SetRectEmpty: 使矩形为空; IsRectEmpty: 判断矩形是否为空; 所谓矩形为空就是矩形是无区域的, 或者说是 Right <= Left 或 Bottom <= To ...
- WinAPI: SetTimer、KillTimer - 创建与移除高性能定时器
//创建定时器函数的声明: SetTimer(hWnd: HWND; {与定时器相关联的窗口句柄}nIDEvent: UINT; {指定一个非 0 的定时器标识符}uElapse: UINT; {指定 ...
- WinAPI: GetCurrentThread、GetCurrentThreadId、GetCurrentProcess、GetCurrentProcessId
{返回当前线程的虚拟句柄} GetCurrentThread: THandle; {返回当前线程 ID} GetCurrentThreadId: DWORD; {返回当前进程的虚拟句柄} GetCur ...
- 博客总目录(2007.11.12 - 2010.4.25)
如果我的学习记录和历程能对你有所帮助, 我非常高兴; 但是 -- "万一" 不是高手.更不是大师, 只是利用工作之余学点东西, 并感觉学得挺吃力. 内容都是写时才会, 难免稚嫩, ...
- (转载博文)VC++API速查
窗口处理 2.1 窗口简介 2.2.1 创建普通窗口(CreateWindow.CreateWindowEx) 2.2.2 关闭窗口(CloseWindow) 2.2.3 销毁窗口(DestroyWi ...
- 获取windows程序界面数据
文章目录 结论 可以尝试的其他方向 最后的挣扎 基础知识 win7/win10查看某个进程的句柄数 句柄的概念 Windows MFC.SDK和API的区别和联系 Windows MFC(C++开发) ...
- 【外挂】API函数列表【链接】
1.WinAPI: FindWindow.FindWindowEx - 查找窗口 2.WinAPI: GetWindowThreadProcessId - 获取指定窗口的进程 ID 或线程 ID 3. ...
最新文章
- 实现给一个DIV加阴影效果!
- flink checkpoint 恢复_Flink断点恢复机制
- Java客户端操作zookeeper:获取/节点的子节点代码示例
- ICCV 2019开源论文 | 捕捉图像DNA——单幅图像下可实现任意尺度自然变换
- oracle易忘函数用法(1)
- 中国牙膏产业深陷 “氟中毒”?
- 苹果断开电脑连接服务器无响应,mac电脑iTerm2链接linux服务器断线解决方案
- 华为可以升级鸿蒙的机型,首批升级鸿蒙机型提前泄露,华为这保密措施需要加强...
- 众善之源 or 万恶之源?详析微服务的好与坏
- 世界500百强企业中国的CEO对我们的忠告!!!!!我们要告别稚气了
- 追赶法matlab算法,追赶法matlab程序
- 天天生鲜项目——商品详情页
- python实用【大技巧】之Python手把手实现远程控制桌面
- 十个Win10使用小技巧,看看你知道哪些?
- 百度富文本编辑器上传文件到OSS
- 计算机应用参考文献,计算机应用领域英文参考文献 哪里有计算机应用领域参考文献...
- Gensim库的使用——Gensim库的核心概念介绍
- 我也写写致青春观后感
- 史蒂芬·柯维写给年轻人的高效工作秘笈
- 4月有8本SCIE期刊被剔除(附MDPI/Frontiers/Hindawi最新在检期刊)
热门文章
- DataGrid连接Access的快速分页法(2)——SQL语句的选用(升序与降序)
- Shiro源码学习之二
- C++中extern C的使用
- 【Qt】QtCreator导入cmake工程
- 【AI】caffe使用步骤(三):编写求解文件solver.prototxt
- vim删除多行_Vim 可视化模式入门 | Linux 中国
- python打印列表元素_python打印列表中指定元素的所有下标
- SpringBoot复习:5(配置绑定)
- Java学习总结:23
- void函数调用时显示不允许使用不完整的_C语言的角落——这些C语言不常用的特性你知道吗?...